【发布时间】:2014-12-17 12:02:53
【问题描述】:
我们知道,当对象的保留计数达到 0 时,它就会变成 Zombie 对象。如果我们访问该对象会发生什么?
【问题讨论】:
-
只有当你启用了僵尸才会变成僵尸
标签: ios objective-c
我们知道,当对象的保留计数达到 0 时,它就会变成 Zombie 对象。如果我们访问该对象会发生什么?
【问题讨论】:
标签: ios objective-c
如果 Zombies 被启用,那么当所有对它的引用都被删除时,该对象将不会被释放;而是会生成一条日志消息,以帮助您追踪此无效引用的来源。
【讨论】:
####
** Message sent to deallocated instance 0xFFFFFFF **
####
虽然最初的答案是崩溃或未定义的行为,但这对于非调试版本完全正确,而不是在您调试应用时,因为它需要使用某些标志来激活 NSZombies。
实际上,僵尸本身并不存在。
保存对象的内存不会在释放时归零。该内存被内存管理器简单地标记为空闲,以后可以重用,并被其他对象或数据完全或部分覆盖。
因此,如果您在没有打开 NSZombies 的情况下访问死对象,您可以想象,您会遇到崩溃或未定义的行为,它甚至可能会工作一段时间。
NSZombies 调试技术通过将释放的内存替换为某种 Zombie 对象来帮助跟踪这一点,这些对象在您访问它们时会记录消息(通常不应该发生)。
p.s:讨厌的人会讨厌
【讨论】: