Objective c 属性公开的私有变量

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的属性,我应该有

我搜索了一些文档,并尝试了Xcode和AppCode。但我仍然对一些事情不确定。有人能澄清一下吗:

  • 如果我有名为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