为什么保留计数在下面的代码中显示值2?

时间:2011-02-22 10:51:49

标签: objective-c memory-management ios4 retaincount

NSLog(@"retain count 1 for show detail -- %d",[showDetail retainCount]);

ChecklistDetail *detail = [appDelegates.arrayForChecklistDetails objectAtIndex:[sender tag]];

self.showDetail = detail;

NSLog(@"retain count 2 for show detail  -- %d",[showDetail retainCount]);

这里,在上面的代码中,第一个nslog的输出是 “保留计数1以显示详细信息 - 0”,  哪个是对的。但是,第二个nslog的输出如下 “保留计数2以显示详细信息 - 2”。

它的保留计数如何达到2?

如果你能帮助我......

3 个答案:

答案 0 :(得分:2)

因为你做的时候

self.showDetail = detail;

如果您的属性是使用'retain'

声明的,那么您可以在保留计数中添加一个

setter为您处理保留计数,当您分配给属性时,setter将增加您为该属性分配的对象的保留计数。类似于为属性指定nil时,它将释放它,即减少对象的保留计数。

答案 1 :(得分:1)

要检查iOS中变量的保留计数和正确的内存管理,请使用仪器,不要检查保留计数设施,因为它不是很信任。

要开始使用Xcode 4中的Instruments,请按住左上角的“运行”按钮,然后按下配置文件。这将使仪器出现。

然后有两个部分,分配和泄漏。在这里,您可以检查内存分配和变量管理。

享受编码......! :)

答案 2 :(得分:0)

我猜你的showDetail属性保留了语义。所以当你这样做时:

self.showDetail = detail;

合成属性调用retain。调用你的二传手的另一种方式可能会更清楚:

[self setShowDetail:detail]

因此,保留计数为1.第二个保留由数组保留。