NSZombies如何真正起作用?

时间:2012-08-15 18:24:18

标签: xcode memory-management nszombie

我找不到关于NSZombie真正起作用的详细苹果文档。我知道它的设计目的并不是实际释放对象,只是保留一些引用来捕获任何额外的版本,但是这样的工作会怎样:

for(int i = 1; i < 10; i++)
{
NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity: i];

[array release];

}

由于在同一个应用程序中分配/初始化并发布了相同的变量/对象,NSZombie在技术上如何处理这个问题?我知道这不应该标记任何僵尸,因为每个alloc都有release,但是Xcode在技术上如何处理重新分配具有不同容量的相同内存?

2 个答案:

答案 0 :(得分:1)

使用Zombies,实际上不需要释放对象[1] - 在对象的保留计数达到0之后,对象在某个时刻变成了“Zombie”。当您发出“Zombified”实例的消息时,执行特殊的错误处理程序。

1)释放僵尸是可选的。除非你真的需要内存用于长时间运行或内存密集型任务,否则对于来释放僵尸是一个更有效的测试(NSDeallocateZombies = NO

答案 1 :(得分:0)

Brad Larson的评论回答了这个问题。

引用:

  

这不是同一个对象,也不是同一个内存。您将在每次遍历该循环时创建一个独特的新NSMutableArray实例。仅仅因为指向每个指针的指针不会使它们成为同一个对象。

     

指针仅指向存在对象的内存中的特定位置。内存中的给定对象可以有多个指针,甚至没有(当它被泄露时)。 NSZombie作用于对象本身,而不是指向它。

相关问题