_var和self.var之间的区别

时间:2011-06-16 19:21:22

标签: iphone objective-c automatic-ref-counting

随着所有这些新的ARC内容(不属于NDA ......)的出现,处理属性的默认设置似乎是在实现文件中明确设置属性而不是ivar,直到你用类似的东西合成它:

@synthesize var = _var;

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

_var是否相当于在头文件中设置它,就像在好日子里一样?那些以下划线表示所有内容的做法来自哪里?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

自动定义@property类似:@property (nonatomic, strong) NSString *var;,Objective-C 2.0及更高版本,截至2012年,@synthesize该属性可创建三件事:

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

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