- //缺点做法,Analyzer分析后会告诉:Value stored to ‘dataArray’ during its initialization is never read
- NSMutableArray *dataArray = [[NSMutableArray alloc] init];
- dataArray = _otherDataArray;
- //精确做法
- NSMutableArray *dataArray = nil;
- dataArray = _otherDataArray;
分析: dataArray已经被初始化分派了内存,然后被另一个可变数组赋值,导致一?数据源却申请了两块内存,造成了内存泄漏。
eg:
- //缺点做法,Analyzer分析后会告诉:Property of mutable type ’NSMutableArray’ has ‘copy’ attribute,an immutable object will be stored instead
- @property (nonatomic, copy) NSMutableArray *dataArr;
- //精确做法
- @property (nonatomic, strong) NSMutableArray *dataArr;
分析: NSMutableArray是可变数据类型,应当用strong来润饰其对象。
解释: Analyzer因为是编译器根据代码进行的断定, 做出的断定不必定会精确, 是以如不雅碰到提示, 应当去结合代码上文检查一下;还有某些造成内存泄漏的轮回引用经由过程Analyzer分析不出来。
二、野指针(Wild pointer)
2-2、排查之内存泄漏对象(Leaks)
- Xcode供给的Leak可以赞助发明运行着的法度榜样内存泄漏的处所。经由过程选中Product-> Profile(快捷键command+i,唤起Instrument对象界面) -> Leaks。切换到Call Tree模式,底部选中Separate by Thread(按线程分开做分析)、Invert Call Tree(反向输出调用树)、Hide System Libraries(隐蔽体系库文件)。最后点击红色按钮开端“录制”,效不雅如下图:
Leaks调试界面.png
- 在Leaks调试界面上,1是Allocations 模板,显示内存分派情况;2是 Leaks 模板,这里可以查看内存泄漏情况。如不雅红X出现, 表示有内存泄漏;主框体区域则会显示泄漏的对象。Call Tree选项介绍如下:
推荐阅读
深度进修:几何视角关于深度进修最令人吃惊的事实莫过于它的简单程度。10 年前,没人想到我们会应用简单的梯度降低参数模型在机械认知范畴取得如斯卓越的成就。如今,只须要在足够多的样>>>详细阅读
本文标题:浅谈iOS Crash(二)
地址:http://www.17bianji.com/lsqh/36391.html
1/2 1

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