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?
如果你能帮助我......答案 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.第二个保留由数组保留。