僵尸和编码器

僵尸!
是! 谁说僵尸不是真实的,如果您是iOS开发人员,您会非常了解它们。 没有? 别担心,让我们来探索一下。

在某个时间点,我们在不知不觉中或有意将它们植入我们的代码中,而更糟糕的情况是我们想要杀死它们。
僵尸不过是一半死亡,一半释放或保留的物体。 在本文中,我们不仅会跟踪它们,而且会以一种更简化的方式进行处理。

您是否曾经在跟踪已释放对象时遇到麻烦?
您是否曾经遇到过崩溃,内容是“发送到已释放实例的消息”?
真正!!! 然后,本文适合您,让我们开始吧。

有时,二进制语言会给我们带来沉重打击。 您能从这个“ 0x10010d681 ”中猜出类名吗? 也许不是。 假设这是一个已释放的对象,现在难度级别将更加困难。 尽管Xcode为我们提供了一个很好的工具来理解和跟踪“ Instruments” 。 在拥有大量分析模板的地方,Instruments是一个很好的工具。 从“ 分配 ”到“ 泄漏 ”再到“ 僵尸 ”。 但是今天,我们将不再探索Instrument,而是采用一种更为简单的方式来追踪僵尸对象的内存历史记录。

知道答案总是更好,无论答案是什么

因此,首先我们将编辑项目的方案:

在“诊断”下,我们有各种“内存管理”选项。
选择“僵尸对象”,然后为“日志记录”选择“ Malloc堆栈”。 就是这样,我们已经准备好运行该项目。

现在,当我们遇到可能由僵尸实例引起的崩溃时,这就是我们要通过在xcode的控制台中输入以下命令来调试它的方法:

a)(lldb)命令脚本导入lldb.macosx.heap
这将产生类似于以下结果: