自我和下划线访问目标c中的属性的区别?
我很困惑自己和下划线来访问目标c中的属性,每当我们创build属性,它的getter-setter自动生成。 所以我们可以使用self.property和_property相同的属性。 在我看来,有一些差别,我没有得到。 请用实例告诉我。
underbar(下划线)版本是实际的实例variables,不应该直接引用。 您应该始终通过属性名称,这将确保任何getter / setter操作被尊重。
所以,如果你做_property = 4
,你直接设置variables。 如果你做self.property = 4
,你正在有效地使方法调用[self setProperty:4]
,这将通过setter(这可能会做一些强制属性的最大值为3,或更新UI反映新的价值,例如)。
当你使用self.XX时,你可以通过setter或者getter来访问属性。
当你使用_XX时,你直接跳过setter或者getter来访问属性。
假设你有一个属性定义如下:
@property (nonatomic,strong) NSString* name;
name属性的getters和setter是为你自动生成的。现在,使用下划线和self的区别在于:
self.name =@"someName"; // this uses a setter method generated for you. _name = @"someName"; // this accesses the name property directly.
这同样适用于获取名称属性;