我搜索了一些文档,并尝试了 Xcode 和 AppCode。但我仍然不确定一些事情。所以有人可以澄清我:
如果我有名为 foo 的属性,我应该有名为
_foo
或的私有实例变量foo
吗?如果我不创建私有实例变量,只需对其进行同步。那么我应该尝试访问什么
self->foo
变量self->_foo
?
我已经看到了这两种方法并且都有效,所以我很好奇是否有任何编码规则或约定,因为我没有找到任何。
注意:我对@synthetize foo=_foo
;不感兴趣
我搜索了一些文档,并尝试了 Xcode 和 AppCode。但我仍然不确定一些事情。所以有人可以澄清我:
如果我有名为 foo 的属性,我应该有名为_foo
或的私有实例变量foo
吗?
如果我不创建私有实例变量,只需对其进行同步。那么我应该尝试访问什么self->foo
变量self->_foo
?
我已经看到了这两种方法并且都有效,所以我很好奇是否有任何编码规则或约定,因为我没有找到任何。
注意:我对@synthetize foo=_foo
;不感兴趣
1.如果我有名为 foo 的属性,我应该有名为 _foo 或 foo 的私有实例变量吗?
您不必自己创建实例变量。将自动为您创建一个带有下划线前缀的实例变量。由于您不应该直接访问变量(见下文),因此您不应该关心底层变量的名称。
2.如果我不创建私有实例变量,只需对其进行同步。那么我应该尝试访问什么变量 self->foo 或 self->_foo ?
尼特。属性的想法是使用访问器而不是直接访问变量。您应该使用self.foo
来获取和设置属性(或者[self foo]
如果[self setFoo:newFoo];
您不喜欢点语法)。另请注意,您不必显式合成该属性。
当 Xcode 自动合成一个属性时,它会自动添加一个支持实例变量,该变量与该属性同名并带有前缀_
. 您无需手动指定实例变量,它会自动存在。
尽管self->_foo
可以编译并且似乎可以工作,但我从未见过有人使用这种语法来访问 ivars。我发现它可能与属性语法混淆self.foo
,所以我会完全避免这种表示法。如果需要,您可以通过直接键入来访问实例变量_foo
。但我也会避免这种情况,除非您覆盖或扩展属性访问器方法。
我将仅通过属性点符号 [1] 访问该属性,恕我直言,这使代码更具可读性并处理您在声明属性时指定的强/弱/复制语义。
-(PropertyType)property
和-(void)setProperty:(PropertyType)property
方法访问属性的语法糖