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.
回答你的第一个问题:
是的,保留计数是两个.
回答你的第二个问题:
使用原因:
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的指针.