> .h file:
NSString *myString;
@property (nonatomic, retain) NSString *myString;
> .m file:
self.myString = [[NSString alloc] init];
如果我没错,我最终会得到一个保留计数为+2的NSString实例。正确?
我很好奇,因为Apple的位置示例使用“自我”。用于初始化。为什么?我检查了它确实显示保留计数为+2。
答案 0 :(得分:7)
回答你的第一个问题:
是的,保留计数为两个。
回答你的第二个问题:
使用原因:
self.myString = x;
相当于:
[self setMyString:x];
是为了正确执行所有属性处理代码。这包括KVO通知,以及在传入时自动保留x的代码。
如果您只是设置:
myString = x;
<。>在.m文件中,您将绕过所有隐藏的属性设置代码,只需将myString成员变量设置为指向x的指针。
答案 1 :(得分:3)
穆斯塔法:是的,你是对的。 (该属性应声明为copy
,而不是retain
,但这是另一回事。)
答案 2 :(得分:1)
在修改1中,您将实例变量直接设置为自动释放的对象。这意味着在事件循环结束时,您的locationManager
将被释放,在这种情况下,您将获得对现在未使用的内存块的引用。
您的修改2对我来说是正确的,您开始使用的示例代码也是如此。