iOS内存问题

早在iOS5.0的时候苹果就引入了ARC的自动管理机制,刚出来的时候,ARC模式还不是很健全,会存在内存泄漏问题,但是现在的ARC已经基本取代了MRC的管理方式,所以我们只需要了解一下MRC,知道ARC的原理即可。

1.简单介绍一下@property属性修饰

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 : 所指向的对象销毁后,仍旧指向已经销毁的对象
2.野指针的查找

在iOS工程中有时会碰到“EXC_BAD_ACCESS”的错误提示

iOS内存问题_第1张图片
“EXC_BAD_ACCESS”的错误提示

因为只知道错误的地方,不知道具体crash的原因,所以很难查找,这时最好开启僵尸对象模式(开启僵尸对象会让程序的编译时间延长,所以一般不打开)

步骤一:
iOS内存问题_第2张图片
步骤二:

这时再次运行程序,crash时,会打印出更多的日志信息

2012-11-28 13:22:08.911 PropMemFun[2132:11303] *** -[CFString respondsToSelector:]: message sent to deallocated instance 0x713ebc0

iOS内存问题_第3张图片
更多的日志信息

3.静态内存泄漏检测

当APP完成之后,要查看内存是否存在泄漏问题。使用Xcode的Analyze就可以分析出哪里存在内存泄漏

iOS内存问题_第4张图片
Analyze
iOS内存问题_第5张图片

根据描述信息来修改内存泄漏

4.动态内存泄漏检测

静态内存分析泄漏有时可能不能把所有的内存泄漏查出来,但是动态检测定位代码不太准确

iOS内存问题_第6张图片
步骤一:
iOS内存问题_第7张图片
步骤二:
iOS内存问题_第8张图片
步骤三:

出现红色的格子则代表内存泄漏

iOS内存问题_第9张图片
内存泄漏

下面就是最重要的定位了
1.模式改选为"Call Tree"模式
2.设置中改为如下设置,来显示内存泄漏的代码
3.双击代码就会显示出泄漏的代码(ps:这个定位不是太准确)

iOS内存问题_第10张图片

你可能感兴趣的:(iOS内存问题)