僵尸模式(NSZombieEnabled) 启用了NSZombieEnabled的话,它会用一个僵尸来替换默认的dealloc实现,也就是在引用计数降到0时,该僵尸实现会将该对象转换成僵尸对象。 如何找出问题 1.NSZombieEnabled EXC_BAD_ACCESS 可以这么说,90%的错误来源在于对一个已经释放的对象进行release操作。 最后提醒NSZombieEnabled只能在调试的时候使用,千万不要忘记在产品发布的时候去掉,因为NSZombieEnabled不会真正去释放dealloc对象的内存,一直开启后果可想而知。 就是当设置NSZombieEnabled环境变量后,一个对象销毁时会被转化为_NSZombie,设置NSZombieEnabled后,当你向一个已经释放的对象发送消息,这个对象就不会向之前那样Crash 如图:(跟设置NSZombieEnabled一样,添加MallocStackLoggingNoCompact,并且设置为YES) ?
错误描述:message sent to deallocated instance 解决方案:NSZombieEnabled e.g.: NSArray *testArr = @[@"1"] 错误描述:EXC_BAD_ACCESS(不能访问该存储器区域) 解决方案:NSZombieEnabled e.g.: UIView *view = [UIView alloc]; [self.view
2 打开NSZombieEnabled,僵尸对象。
通过环境变量 NSZombieEnabled可开启此功能; 系统会修改对象的 isa指针,令其指向特殊的僵尸类。
通过环境变量NSZombieEnabled可开启此功能 系统会修改对象的isa指针,令其指向特说的僵尸类,从而使该对象变为僵尸对象。