早在iOS5.0的时候苹果就引入了ARC的自动管理机制,刚出来的时候,ARC模式还不是很健全,会存在内存泄漏问题,但是现在的ARC已经基本取代了MRC的管理方式,所以我们只需要了解一下MRC,知道ARC的原理即可。
<h5>1.简单介绍一下@property属性修饰</h5>
1.weak:
1>修饰弱引用的OC对象
2.assign:
1>修饰弱引用的OC对象
2>修饰基本数据类型
3.strong
1>修饰强引用的OC对象
4.copy
1>修饰NSString类型
2>修饰block
5.使用weak和assign修饰OC对象的区别
1>成员变量
1)weak生成的成员变量是用__weak修饰的
2)assign生成的成员变量是用__unsafe_unretained修饰的
2>__weak和__unsafe_unretained
1)都不是强指针(不是强引用),不能保住对象的命
2)__weak : 所指向的对象销毁后,会自动变成nil指针(空指针),不再指向已经销毁的对象
3)__unsafe_unretained : 所指向的对象销毁后,仍旧指向已经销毁的对象
<h5>2.野指针的查找</h5>
在iOS工程中有时会碰到“EXC_BAD_ACCESS”的错误提示
因为只知道错误的地方,不知道具体crash的原因,所以很难查找,这时最好开启僵尸对象模式(开启僵尸对象会让程序的编译时间延长,所以一般不打开)
这时再次运行程序,crash时,会打印出更多的日志信息
2012-11-28 13:22:08.911 PropMemFun[2132:11303] *** -[CFString respondsToSelector:]: message sent to deallocated instance 0x713ebc0
<h5>3.静态内存泄漏检测</h5>
当APP完成之后,要查看内存是否存在泄漏问题。使用Xcode的Analyze就可以分析出哪里存在内存泄漏
根据描述信息来修改内存泄漏
<h5>4.动态内存泄漏检测</h5>
静态内存分析泄漏有时可能不能把所有的内存泄漏查出来,但是动态检测定位代码不太准确
出现红色的格子则代表内存泄漏
下面就是最重要的定位了
1.模式改选为"Call Tree"模式
2.设置中改为如下设置,来显示内存泄漏的代码
3.双击代码就会显示出泄漏的代码(ps:这个定位不是太准确)