代码之家  ›  专栏  ›  技术社区  ›  fuzzygoat

Ivar财产,通过自身访问?

  •  3
  • fuzzygoat  · 技术社区  · 14 年前

    我理解,当访问属性的setter/getter方法时,我应该使用[ self setThisValue:@"a"]; 而不是 thisValue = @"a"; 但是,通过下面的示例,我可以看到添加自己的文档,我正在将消息发送到一个ivar属性,而不是一个本地范围的变量,但是在这种情况下,它还能做什么呢?

    @interface CustomController : UIViewController {
        NSMutableArray *foundList;
    }
    @property(nonatomic, retain) NSMutableArray *foundList;
    @end
    

    .

    [[self foundList] addObject:eachObject]; // I usually write this ...
    

    [foundList addObject:eachObject];
    

    加里.

    4 回复  |  直到 14 年前
        1
  •  4
  •   JeremyP    14 年前

    如果您为一个IVAR定义了一个属性,那么您应该使用它,而不是直接访问IVAR。它允许子类重写setter/getter,并执行一些不同的操作,只从ivar中获取值。

    唯一的例外是init方法和dealloc。

        2
  •  2
  •   Vladimir    14 年前

    使用

    [[self foundArray] addObject:eachObject];
    

    您只需向getter方法添加额外的调用,我认为在大多数情况下这是不必要的。另一方面,除非您实现自己的定制getter并在那里做一些奇怪的事情,否则这个构造的开销非常小,因此在实践中,我认为这只是样式问题。(我个人不会在这里使用财产)

        3
  •  1
  •   Raymond W    14 年前

    如果您要子类化,或者让其他人重用您的代码,并且他们想要覆盖您的功能,那么accessor方法非常方便。

        4
  •  0
  •   karim    14 年前

    使用self.ivar还存在一些内存清理问题。特别是你保留了一个属于其他阶级的财产。然后你得到任何新的对象,想要改变对self.ivar=new object的引用。如果不使用self.ivar,则当newObject也为其他人所有时,它可能会具有错误的访问权限。 默认的setter检查是否引用,如果不是nil,则释放旧值并将新的ivar设置为新值。 今天我在使用没有自己的对象,陷入了这个问题。 简而言之,如果对象是共享的,请使用self.ivar…