NSZombie(僵尸对象)

1、内存泄漏:对象使用完没有释放,导致内存浪费。
2、僵尸对象:过度释放的对象。对象可能在内存中,但对象的状态已为dealloc,如果使用一个僵尸对象调用方法等,系统会提示:send message to a dealloc 对象

3、野指针:调用僵尸对象的指针。报错:EXC_BAD_ACCECC。
4、空指针:地址存储为nil / null 。在oc中使用空指针调中方法不会报错。
5、僵尸对象检测:
使用 Instruments工具的Zombies跟踪模板。其中Instruments选择Zombies模板,点击Choose按钮就可以进入了

NSZombie(僵尸对象)_第1张图片
Instruments _Zombies.png

在Launch Configuration中勾选Record reference counts和Enable NSZombie detection。其中Record reference counts是显示引用计数,Enable NSZombie detection是能够检测僵尸对象。
NSZombie(僵尸对象)_第2张图片
Zombies_launch configuration.png

这样在程序运行的时候,如果发现僵尸对象它就会弹出一个对话框,点击其中“→”按钮,在屏幕的下方会显示僵尸对象的详细信息,下图可以看到僵尸对象的引用计数变化情况。
NSZombie(僵尸对象)_第3张图片
僵尸对象信息对话框.png

NSZombie(僵尸对象)_第4张图片
僵尸对象信息.png

点击右下角跟踪信息堆栈,会打开对应代码,从而定位僵尸对象
NSZombie(僵尸对象)_第5张图片
堆栈信息.png

双击红线部分可以得到下图中的信息
NSZombie(僵尸对象)_第6张图片
代码.png

经过分析得知:此处僵尸对象的引用计数为0,被系统释放。

本文是在Xcode6.4,MRR下进行测试。

你可能感兴趣的:(NSZombie(僵尸对象))