艾沃房地产,通过自己访问?

我明白,当访问属性的setter / getter方法时,我应该使用[ self setThisValue:@"a"]; 而不是thisValue = @"a"; 然而,下面的例子中,我可以看到添加自我文档,我发送消息到一个iVar属性而不是本地范围的variables,但它在这种情况下做任何事情吗?

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

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

要么

 [foundList addObject:eachObject]; 

加里。

如果你有一个伊娃定义的财产,你应该使用它,而不是直接访问伊娃。 这允许子类重写setter / getter,并做一些不同的事情,只是从伊娃获取的价值。

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

运用

 [[self foundArray] addObject:eachObject]; 

你只需要添加额外的调用getter方法,这在我认为在大多数情况下是不必要的。 另一方面,除非你实现自己的自定义getter,做一些奇怪的事情,这个构造的开销是非常小的,所以在实践中,我认为这只是风格的问题。 (我个人不会在这里使用财产)

访问器方法是非常方便的,如果你有子类,或有其他人重用你的代码,他们想覆盖你的function。

使用self.ivar也有一些内存清理问题。 ESP。 你有保留其他类别拥有的财产。 然后你得到任何新的对象,并想改变引用self.ivar = newObject。 如果你不使用self.ivar,那么当newObject也被其他人拥有时,它可能会有不好的访问。 默认的setter,检查引用,如果不是零,则释放旧值并将新的ivar设置为新值。 我今天在没有自我的情况下使用了对象,并陷入了这个问题。 总之,如果对象是共享的,使用self.ivar …