0

我找不到任何关于NSZombie真正功能的详细苹果文档。我知道它的设计目的是不实际释放对象,而只是维护引用计数以捕获任何额外的版本,但是这样的事情将如何工作:

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

[array release];

}

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

4

2 回答 2

1

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

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

于 2012-08-26T22:07:18.040 回答
0

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

引用:

那不是同一个对象,也不是同一个记忆。每次通过该循环时,您都会创建一个独特的新 NSMutableArray 实例。仅仅因为将每个指针分配给数组并不会使它们成为同一个对象。

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

于 2012-08-26T22:02:17.147 回答