Objective c 属性公开的私有变量
我搜索了一些文档,并尝试了Xcode和AppCode。但我仍然对一些事情不确定。有人能澄清一下吗:Objective c 属性公开的私有变量,objective-c,properties,Objective C,Properties,我搜索了一些文档,并尝试了Xcode和AppCode。但我仍然对一些事情不确定。有人能澄清一下吗: 如果我有名为foo的属性,我应该有名为\u foo或foo的私有实例变量吗 如果我不创建私有实例变量,只需对其进行语法化。那么我应该尝试访问哪个变量self->foo或self->\u foo 我已经看到了这两种方法,并且都有效,所以我很好奇是否有任何编码规则或约定,因为我没有找到任何规则或约定 注意:我对@synthetize foo=\u foo不感兴趣 1。如果我有名为foo的属性,我应该有
\u foo
或foo
的私有实例变量吗self->foo
或self->\u foo
@synthetize foo=\u foo
不感兴趣
1。如果我有名为foo的属性,我应该有名为_foo或foo的私有实例变量吗
您不必自己创建实例变量。将自动为您创建以下划线为前缀的实例变量。因为您不应该直接访问变量(见下文),所以您不应该关心底层变量的调用
2.如果我没有创建私有实例变量,只需对其进行语法化即可。那么我应该尝试访问self->foo还是self->\u foo
尼瑟。属性的思想是使用访问器,而不是直接访问变量。您应该使用self.foo
来获取和设置属性(或者[self-foo]
和[self-setFoo:newFoo];
如果您不喜欢点语法)。还要注意,您不必显式地合成属性
1。如果我有名为foo的属性,我应该有名为_foo或foo的私有实例变量吗
您不必自己创建实例变量。将自动为您创建以下划线为前缀的实例变量。因为您不应该直接访问变量(见下文),所以您不应该关心底层变量的调用
2.如果我没有创建私有实例变量,只需对其进行语法化即可。那么我应该尝试访问self->foo还是self->\u foo
尼瑟。属性的思想是使用访问器,而不是直接访问变量。您应该使用
self.foo
来获取和设置属性(或者[self-foo]
和[self-setFoo:newFoo];
如果您不喜欢点语法)。还请注意,您不必显式地合成属性。当Xcode自动合成属性时,它会自动添加一个支持实例变量,该变量的名称与带有前缀的属性的名称相同。您不需要手动指定实例变量,它自动存在
虽然self->\u foo
编译并似乎可以工作,但我从未见过有人使用这种语法访问IVAR。我发现它可能会与属性语法self.foo
混淆,所以我会完全避免使用这种符号。如果需要,可以直接键入\u foo
来访问实例变量。但我也会避免这种情况,除非您重写或扩展属性访问器方法
我将仅通过属性点符号[1]访问该属性,IMHO使代码更具可读性,并处理您在声明属性时指定的强/弱/复制语义
-(PropertyType)属性
和-(void)setProperty:(PropertyType)属性
方法访问属性的语法糖当Xcode自动合成一个属性时,它会自动添加一个支持实例变量,该变量的名称与前面加了前缀的属性相同。您不需要手动指定实例变量,它自动存在 虽然
self->\u foo
编译并似乎可以工作,但我从未见过有人使用这种语法访问IVAR。我发现它可能会与属性语法self.foo
混淆,所以我会完全避免使用这种符号。如果需要,可以直接键入\u foo
来访问实例变量。但我也会避免这种情况,除非您重写或扩展属性访问器方法
我将仅通过属性点符号[1]访问该属性,IMHO使代码更具可读性,并处理您在声明属性时指定的强/弱/复制语义
-(PropertyType)属性
和-(void)setProperty:(PropertyType)属性
方法访问属性的语法糖1.你能提供一些相关文档的链接吗?因为我几乎可以肯定这两个版本(带下划线和不带下划线)的工作原理是相同的。2.我喜欢点表示法,但在某些情况下,我希望直接访问私有变量,忽略访问器。你说得对,我已经将它移到了那里。:-)1.你能提供一些相关文档的链接吗?因为我几乎可以肯定这两个版本(带下划线和不带下划线)的工作原理是相同的。2.我喜欢点表示法,但在某些情况下,我希望直接访问私有变量,忽略访问器。你说得对,我已经将它移到了那里。:-)两者都不起作用,相反,声明foo ivar和foo属性将导致两个名称混淆的ivar:
\u foo
和foo
。两者都不起作用,相反,声明foo ivar和foo属性将导致两个名称混淆的ivar:\u foo
和foo
。