2
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 的输出是 "retain count 1 for show detail -- 0",这是正确的。但是,第二个 nslog 的输出如下 “retain count 2 for show detail -- 2”。

它的保留计数如何上升到 2?

如果可以的话,请帮助我....

4

3 回答 3

2

因为当你这样做时

self.showDetail = 细节;

如果您的属性声明为“保留”,则您将保留计数加一

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

于 2011-02-22T10:55:39.107 回答
1

要检查 iOS 中变量的保留计数和正确的内存管理,请使用 Instruments 并且不要检查保留计数工具,因为它不是很可靠。

要开始在 Xcode 4 中使用 Instruments,请按住左上角的 Run 按钮,然后按下 profile。这将使仪器出现。

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

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

于 2012-07-03T12:57:01.263 回答
0

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

self.showDetail = detail;

合成属性调用保留。调用 setter 的另一种方法可能会使这一点更清楚:

[self setShowDetail:detail]

所以保留计数为 1。第二个保留由数组保存。

于 2011-02-22T10:57:23.847 回答