繁体   English   中英

NSZombies如何真正发挥作用?

[英]How Does NSZombies Really Work?

我找不到有关NSZombie实际功能的任何详细的Apple文档。 我了解它的设计目的不是实际上释放对象,而只是维护一定数量的引用以捕获任何额外的释放,但是这种方式是如何工作的:

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

[array release];

}

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

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

1)释放僵尸是可选的。 除非您确实需要长时间运行的内存或占用大量内存的内存,否则释放僵尸是一种更有效的测试( NSDeallocateZombies = NO

布拉德·拉尔森Brad Larson)的评论回答了这个问题。

引用:

那不是相同的对象,也不是相同的内存。 您将在通过该循环的每个遍历上创建一个不同的新NSMutableArray实例。 仅仅因为指向每个对象的指针分配给数组并不能使它们成为同一对象。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM