我找不到关于NSZombie
真正起作用的详细苹果文档。我知道它的设计目的并不是实际释放对象,只是保留一些引用来捕获任何额外的版本,但是这样的工作会怎样:
for(int i = 1; i < 10; i++)
{
NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity: i];
[array release];
}
由于在同一个应用程序中分配/初始化并发布了相同的变量/对象,NSZombie
在技术上如何处理这个问题?我知道这不应该标记任何僵尸,因为每个alloc
都有release
,但是Xcode在技术上如何处理重新分配具有不同容量的相同内存?
答案 0 :(得分:1)
使用Zombies,实际上不需要释放对象[1] - 在对象的保留计数达到0之后,对象在某个时刻变成了“Zombie”。当您发出“Zombified”实例的消息时,执行特殊的错误处理程序。
1)释放僵尸是可选的。除非你真的需要内存用于长时间运行或内存密集型任务,否则对于不来释放僵尸是一个更有效的测试(NSDeallocateZombies
= NO
)
答案 1 :(得分:0)
Brad Larson的评论回答了这个问题。
引用:
这不是同一个对象,也不是同一个内存。您将在每次遍历该循环时创建一个独特的新NSMutableArray实例。仅仅因为指向每个指针的指针不会使它们成为同一个对象。
指针仅指向存在对象的内存中的特定位置。内存中的给定对象可以有多个指针,甚至没有(当它被泄露时)。 NSZombie作用于对象本身,而不是指向它。