我很难在self和下划线之间访问Objective c中的属性,无论何时我们创建属性,它的getter-setter都会自动生成。因此,我们可以使用self.property访问相同的属性,并且与_property相同。在我看来,应该有一些不同之处,我没有得到。请告诉我一些例子。
答案 0 :(得分:20)
下划线(下划线)版本是实际的实例变量,不应直接引用。您应该始终通过属性名称,这将确保任何getter / setter操作都得到尊重。
因此,如果您编码_property = 4
,则直接设置变量。如果你编码self.property = 4
,你实际上是在调用方法调用[self setProperty:4]
,这将通过setter(可能会执行诸如强制属性的最大值为3或更新UI以反映)例如,新值。
答案 1 :(得分:9)
当您使用self.XX时,您可以通过setter或getter访问该属性。
当您使用_XX时,您可以直接访问该属性跳过setter或getter。
答案 2 :(得分:2)
假设您的属性定义如下:
@property (nonatomic,strong) NSString* name;
将自动为您生成name属性的getter和setter。现在,使用下划线和self之间的区别在于:
self.name =@"someName"; // this uses a setter method generated for you.
_name = @"someName"; // this accesses the name property directly.
同样适用于获取name属性;