有关在Objective-C中访问实例属性的最佳实践?

Jia*_* Li 1 iphone cocoa cocoa-touch objective-c ios

可能重复:
self.ivar和ivar之间的区别?

我想知道,如果我在Obj-C中将实例变量定义为属性,例如,

@property (copy) NSString *str; 
Run Code Online (Sandbox Code Playgroud)

@synthesize str = _str; 
Run Code Online (Sandbox Code Playgroud)

我应该在实例方法中访问它吗?

_str = @"ABC";
Run Code Online (Sandbox Code Playgroud)

或者我应该使用访问者,即

[self setStr:@"ABC"];
Run Code Online (Sandbox Code Playgroud)

有关于此的一般指导原则吗?

非常感谢!

Die*_*Epp 7

可以从类中读取实例变量:

NSLog(@"str = %@", _str);
Run Code Online (Sandbox Code Playgroud)

但是不要直接设置实例变量:

_str = @"ABC"; // No!
Run Code Online (Sandbox Code Playgroud)

这绕过了copy你仔细放置在你房产上的机制.所以这样做是这样的:

[self setStr:@"ABC"]; // Ok
self.str = @"ABC";    // Ok, shorter
Run Code Online (Sandbox Code Playgroud)