3

随着所有这些新的 ARC 东西(不属于 NDA...)的出现,处理属性的默认设置似乎是在实现文件中显式设置没有和 ivar 的属性,直到您将其与以下内容合成:

@synthesize var = _var;

设置变量的最佳做法是什么?var我知道和之间的区别self.varself.var使用点表示法和使用 var 的 setter 方法。

是否_var相当于在头文件中设置它,就像在过去那样?用下划线开头的这种做法从何而来?

4

2 回答 2

2

_var只是实例变量的不同名称(大概是为了在您打算使用访问器时不会意外直接访问它)。除了作为有效的 ivar 名称之外,它在语言中没有任何特殊含义。

于 2011-06-16T19:25:45.197 回答
1

当你定义一个@propertylike:@property (nonatomic, strong) NSString *var;时,Objective-C 2.0 及更高版本自动,截至 2012 年,@synthesizes 该属性创建三个东西:

  • 的基础实例变量NSString *_var
  • 获取底层实例变量的方法:-(NSString *)var {}
  • 一种设置底层实例变量的方法:-(void)setVar:(NSString *)newVar {}

通常,直接访问或设置底层实例变量不是好的做法,因为会弄乱 KVO 并绕过可能已放入 getter 或 setter 方法的副作用。

于 2018-01-11T16:32:07.223 回答