如何Check僵尸对象
2017-08-17 本文已影响0人
ManThirty
野指针和僵尸对象
野指针:
C语言:当我们声明一个指针变量,没有为这个指针变量赋初始值,这个指针变量的值是一个垃圾指针,指向一块随机的内存空间。
OC: 指针指向的对象已经被回收掉了,这个指针就叫做野指针。
僵尸对象:
野指针指向的已经释放的对象就叫僵尸对象。
空指针:
没有指向存储空间的指针
潜在风险
使用野指针访问僵尸对象,有的时候会出问题,有的时候不会出问题。当野指针指向的僵尸对象所占用的空间还没有分配给其他对象时,可以进行访问,因为对象数据还在。否则,就会出现程序崩溃,报EXC_BAD_ACCESS错误。
如何检测?
Xcode集成了检测僵尸对象的功能,但由于开启此项功能比较耗性能,所以默认是关闭的,需要我们手动开启。开启步骤如下:
第一步:打开Xcode,选择左上角Xcode->Preferences->Behaviors,设置一下输出信息,在调试的时候可以给我们提供更多的信息。
第二步:设置环境变量:菜单->Product->Scheme->Edit Scheme,勾选下图红色框内的三个选项。

第三步:运行程序,程序检测到僵尸对象会中止运行。

第四步:在控制台查看日志和进程号(图示进程号为4984
)

第五步:打开终端,输入sudo malloc_history + 进程号 + 内存地址,得到日志,可以通过路径找到真正的原因。
