如果我们访问作为NSZombie的对象会发生什么?

时间:2014-12-17 12:02:54

标签: ios objective-c

我们知道当对象保留计数达到0时,它会变成Zombie对象。如果我们访问该对象会发生什么?

2 个答案:

答案 0 :(得分:1)

如果启用了 Zombies ,那么当删除对它的所有引用时,将不会释放该对象;而是生成一条日志消息,以帮助您跟踪此无效引用的来源。

答案 1 :(得分:1)

####       




               ** Message sent to deallocated instance 0xFFFFFFF **




####

虽然原始答案是崩溃或未定义的行为,但对于非调试版本,这是完全正确的,而不是在调试应用程序时,因为它需要使用某些标志来激活NSZombies。

实际上僵尸本身就没有这样的东西。

保留对象的内存在发布时不会归零。该内存只是由内存管理器标记为空闲,可以在以后重用,并被其他一些对象或数据完全或部分覆盖。

因此,如果您在没有打开NSZombies的情况下访问死对象,您可以想象,您会遇到崩溃或未定义的行为,它甚至可能会工作一段时间。

NSZombies调试技术通过使用某种Zombie对象替换已释放的内存来帮助跟踪它,这些Zombie对象在您访问它们时会记录消息(通常不应该发生)。

p.s:HATERS GONNA HATE