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