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

Mus*_*afa 0 iphone cocoa memory-management objective-c

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

> .m file:
self.myString = [[NSString alloc] init];
Run Code Online (Sandbox Code Playgroud)

如果我没有错,我将得到一个保留计数为+2的NSString实例.对?

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

e.J*_*mes 7

回答你的第一个问题:

是的,保留计数是两个.


回答你的第二个问题:

使用原因:

self.myString = x;
Run Code Online (Sandbox Code Playgroud)

这相当于:

[self setMyString:x];
Run Code Online (Sandbox Code Playgroud)

这样就可以正确执行所有属性处理代码.这包括KVO通知,以及在传入时自动保留x的代码.

如果您只是设置:

myString = x;
Run Code Online (Sandbox Code Playgroud)

在.m文件中,您将绕过所有隐藏的属性设置代码,并简单地将myString成员变量设置为指向x的指针.