iOS Zombie Object僵尸对象解析

为什么觉得有必要来研究下这个问题呢,正所谓书到用时方恨少。。。这两天在面试,面试的时候问了什么是 Zombie Object,如何调试它。。。我 balabala。。。。说了一大堆,正当我沾沾自喜的时候,面试官又问了一句,那 OC 是怎么实现 Zombie Object 的呢?打开这些环境变量,底层都做了什么呢?我微微一笑,略表尊重,不知道。。。。

好吧,那就好好整理下吧,防止下次再被问到。

首先如何打开Zombile Object 调试模式呢?

这个问题相信大家都不陌生:

第一步、打开Xcode 选择屏幕左上角Xcode-> PReferencese

iOS Zombie Object僵尸对象解析_第1张图片

设置一下输出信息,调试的时候能够输出更多的输出信息

第二步再对环境变量进行设置菜单 Product->Scheme->EditScheme

勾选上下列选项:

iOS Zombie Object僵尸对象解析_第2张图片

 这样程序运行时如果访问了已经释放的对象,则会精准的的定位信息,抛出异常 。该功能的原理是在对象释放时,使用一个内置的 Zombie,替代原来的被释放的对象。

sudo malloc_history 进程 ID 内存地址,可以查看错误日志。

现在我们知道什么是僵尸对象(Zombie Object)了吗?其实他就是一种用来检测内存错误(EXC_BAD_ACCESS)的对象。

那当我勾选了这些对象时,系统其实做了哪些操作呢?

为什么勾选了这些,就能有这些效果呢?

https://www.jianshu.com/p/493f581d336b

 

你可能感兴趣的:(IOS,iOS面试)