1、内存泄漏:对象使用完没有释放,导致内存浪费。
2、僵尸对象:过度释放的对象。对象可能在内存中,但对象的状态已为dealloc,如果使用一个僵尸对象调用方法等,系统会提示:send message to a dealloc 对象
3、野指针:调用僵尸对象的指针。报错:EXC_BAD_ACCECC。
4、空指针:地址存储为nil / null 。在oc中使用空指针调中方法不会报错。
5、僵尸对象检测:
使用 Instruments工具的Zombies跟踪模板。其中Instruments选择Zombies模板,点击Choose按钮就可以进入了。
在Launch Configuration中勾选Record reference counts和Enable NSZombie detection。其中Record reference counts是显示引用计数,Enable NSZombie detection是能够检测僵尸对象。
Zombies_launch configuration.png
这样在程序运行的时候,如果发现僵尸对象它就会弹出一个对话框,点击其中“→”按钮,在屏幕的下方会显示僵尸对象的详细信息,下图可以看到僵尸对象的引用计数变化情况。
僵尸对象信息对话框.png
僵尸对象信息.png
点击右下角跟踪信息堆栈,会打开对应代码,从而定位僵尸对象。
堆栈信息.png
双击红线部分可以得到下图中的信息
代码.png
经过分析得知:此处僵尸对象的引用计数为0,被系统释放。
本文是在Xcode6.4,MRR下进行测试。
网友评论