【问题标题】:difference between _var and self.var_var 和 self.var 之间的区别
【发布时间】:2011-06-16 19:21:22
【问题描述】:

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

@synthesize var = _var;

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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 2020-05-10
      • 2014-09-20
      • 2010-10-28
      • 2015-10-04
      相关资源
      最近更新 更多