美文网首页
iOS 底层原理39:Instruments系列(八)Zombi

iOS 底层原理39:Instruments系列(八)Zombi

作者: Style_月月 | 来源:发表于2022-09-26 16:09 被阅读0次

    iOS 底层原理 文章汇总

    Instruments为我们提供了检测僵尸对象的工具:Zombies。使用这个工具,将会自动开启Enable Zombies Objects模式,而不需要手动去设置

    Enable Zombies Objects检测原理

    Zombies Objects 官方解释:一个对象已经解除了它的引用,已经被释放掉,但是此时仍然是可以接受消息,这个对象就叫做Zombie Objects(僵尸对象)。

    其检测原理如下所示主要分为两步,具体可参考iOS-底层原理36:内存优化(一) 野指针探测

    • 生成僵尸对象


      Instruments_08_01.png
    • 触发僵尸对象


      Instruments_08_02.png

    在iOS中,导致僵尸对象的常见场景有以下三种:

    • 【释放后再释放】:一个对象已经被释放(或自动释放),程序会再次尝试释放它。
    • 【该保留未保留】:一个对象本应被保留的时候却没有被保留。
    • 【释放后调用】:在对象被释放后,会对其进行其他调用。

    Zombies 使用

    • 创建一段代码
     __unsafe_unretained NSMutableArray *array = [[NSMutableArray alloc] init];
    [array addObject:@"1"];
    
    • 使用Profile,选择Zombies,点击左上角红色按钮启动


      Instruments_08_03.png
    • 在程序运行期间,如果检测到僵尸对象,会出现一个小旗标志,双击打开如下所示


      Instruments_08_04.png
    • 点击messaged的箭头,会定位到定位到具体的代码及调用栈


      Instruments_08_05.png
    • 双击调用栈对应的方法后,可以查看具体的代码


      Instruments_08_06.png
      Instruments_08_07.png

    参考文章

    iOS开发错误调适instruments之Zombies的使用
    iOS知识小集 第9期
    官方文档:Finding zombies

    相关文章

      网友评论

          本文标题:iOS 底层原理39:Instruments系列(八)Zombi

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