你能帮我理解cocoa / objective-c中的保留计数吗?

时间:2009-01-28 07:18:41

标签: iphone objective-c cocoa memory-management

> .h file:
NSString *myString;
@property (nonatomic, retain) NSString *myString;

> .m file:
self.myString = [[NSString alloc] init];

如果我没错,我最终会得到一个保留计数为+2的NSString实例。正确?

我很好奇,因为Apple的位置示例使用“自我”。用于初始化。为什么?我检查了它确实显示保留计数为+2。

3 个答案:

答案 0 :(得分:7)

回答你的第一个问题:

是的,保留计数为两个。


回答你的第二个问题:

使用原因:

self.myString = x;

相当于:

[self setMyString:x];

是为了正确执行所有属性处理代码。这包括KVO通知,以及在传入时自动保留x的代码。

如果您只是设置:

myString = x;
<。>在.m文件中,您将绕过所有隐藏的属性设置代码,只需将myString成员变量设置为指向x的指针。

答案 1 :(得分:3)

穆斯塔法:是的,你是对的。 (该属性应声明为copy,而不是retain,但这是另一回事。)

答案 2 :(得分:1)

在修改1中,您将实例变量直接设置为自动释放的对象。这意味着在事件循环结束时,您的locationManager将被释放,在这种情况下,您将获得对现在未使用的内存块的引用。

您的修改2对我来说是正确的,您开始使用的示例代码也是如此。