随着所有这些新的 ARC 东西(不属于 NDA...)的出现,处理属性的默认设置似乎是在实现文件中显式设置没有和 ivar 的属性,直到您将其与以下内容合成:
@synthesize var = _var;
设置变量的最佳做法是什么?var
我知道和之间的区别self.var
是self.var
使用点表示法和使用 var 的 setter 方法。
是否_var
相当于在头文件中设置它,就像在过去那样?用下划线开头的这种做法从何而来?
随着所有这些新的 ARC 东西(不属于 NDA...)的出现,处理属性的默认设置似乎是在实现文件中显式设置没有和 ivar 的属性,直到您将其与以下内容合成:
@synthesize var = _var;
设置变量的最佳做法是什么?var
我知道和之间的区别self.var
是self.var
使用点表示法和使用 var 的 setter 方法。
是否_var
相当于在头文件中设置它,就像在过去那样?用下划线开头的这种做法从何而来?
_var
只是实例变量的不同名称(大概是为了在您打算使用访问器时不会意外直接访问它)。除了作为有效的 ivar 名称之外,它在语言中没有任何特殊含义。
当你定义一个@property
like:@property (nonatomic, strong) NSString *var;
时,Objective-C 2.0 及更高版本自动,截至 2012 年,@synthesize
s 该属性创建三个东西:
NSString *_var
。-(NSString *)var {}
-(void)setVar:(NSString *)newVar {}
通常,直接访问或设置底层实例变量不是好的做法,因为会弄乱 KVO 并绕过可能已放入 getter 或 setter 方法的副作用。