自我和下划线访问目标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. 

这同样适用于获取名称属性;