3、代码中的留意事项
检查应用assgin或 unsafe_unretained 润饰指向OC对象的指针 和 Core Foundation等底层操作。
三、内存泄漏(Memory Leak)
1、概述
- 内存泄漏是指没有释放掉落不再引用对象的内存。即便ARC帮我们解决很多麻烦,然则内存泄漏问题依然比较多;一般开辟停止后,都要做一些根本的内存泄漏排查工作。
- 内存泄漏排查,一般采取Analyzer(静态分析) + Leaks + MLeaksFinder (第三方对象)
2-1、排查之静态分析(Analyzer)
- Xcode供给的 Analyzer可以在法度榜样没运行的时刻,经由过程分析代码高低文的语法构造和内存情况,找出代码中潜在缺点,如内存泄漏、未应用函数和变量等。选中Product->Analyze(快捷键command+shift+B)可以应用了。
- Analyzer重要分析四种问题:
1) 逻辑缺点:拜访空指针或未初始化的变量等;
2) 内存治理缺点:如内存泄漏等;Core Foundation不支撑ARC
3) 声明缺点:大年夜未应用过的变量;
4) API调用缺点:未包含应用的库和框架。
- Analyzer履行后,常见的警告类型有:
1)内存警告(Memory)
eg:
Allocation界面Mark Generation下显示.png
分析:Analyzer检查出来内存泄漏,比较常见的就是CG、CF开首的内存泄漏,内存申请,忘记释放了。还有一种是,C申请的内存,没有配对应用new delete, malloc free。
2)无效数据警告(Dead store)
eg:
- - (UIImage *)clipImageWithRect:(CGRect)rect{
- CGFloat scale = self.scale;
- CGImageRef clipImageRef = CGImageCreateWithImageInRect(self.CGImage,
- CGRectMake(rect.origin.x * scale,
- rect.origin.y * scale,
- rect.size.width * scale,
- rect.size.height * scale));
- CGRect smallBounds = CGRectMake(0, 0, CGImageGetWidth(clipImageRef)/scale, CGImageGetHeight(clipImageRef)/scale);
- UIGraphicsBeginImageContextWithOptions(smallBounds.size, YES, scale);
- CGContextRef context = UIGraphicsGetCurrentContext();
- CGContextTranslateCTM(context, 0, smallBounds.size.height);
- CGContextScaleCTM(context, 1.0, -1.0);
推荐阅读
深度进修:几何视角关于深度进修最令人吃惊的事实莫过于它的简单程度。10 年前,没人想到我们会应用简单的梯度降低参数模型在机械认知范畴取得如斯卓越的成就。如今,只须要在足够多的样>>>详细阅读
本文标题:浅谈iOS Crash(二)
地址:http://www.17bianji.com/lsqh/36391.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示