美文网首页
NSZombie(僵尸对象)

NSZombie(僵尸对象)

作者: 某个胖子 | 来源:发表于2015-09-15 23:57 被阅读382次

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

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

    Instruments _Zombies.png
    在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下进行测试。

    相关文章

      网友评论

          本文标题:NSZombie(僵尸对象)

          本文链接:https://www.haomeiwen.com/subject/tmqjcttx.html