我找不到任何关于NSZombie实际工作原理的详细苹果文档。我知道它的设计目的并不是实际释放对象,而只是维护引用的数量来捕获任何额外的释放,但是像这样的东西是如何工作的:
for(int i = 1; i < 10; i++)
{
NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity: i];
[array release];
}由于相同的变量/对象在同一个应用程序中被分配/初始化和释放,NSZombie在技术上如何处理这个问题?我知道这不应该标记任何僵尸,因为每个alloc都有一个release,但是从技术上讲,Xcode如何处理不同容量的相同内存的重新分配?
发布于 2012-08-27 06:02:17
这个问题在Brad Larson的评论中得到了回答。
引用:
不同对象或不同内存的
。每次通过该循环时,您都会创建一个不同的新NSMutableArray实例。仅仅因为指向每个对象的指针被赋值给array并不能使它们成为同一个对象。
指针仅指向对象所在的内存中的特定位置。内存中的给定对象可以有多个指向它的指针,或者甚至没有指针(当它被泄漏时)。NSZombie作用于对象本身,而不是指向它的指针。
发布于 2012-08-27 06:07:18
对于僵尸,对象实际上不需要保留--在对象的保留计数达到0后的某个时刻,对象只会变成“freed1”。当您向一个“僵尸”实例发送消息时,会执行一个特殊的错误处理程序。
1)释放僵尸是可选的。除非您确实需要内存来执行长时间运行或内存密集型任务,否则最有效的测试方法是不释放僵尸(NSDeallocateZombies = NO)
https://stackoverflow.com/questions/11974890
复制相似问题