艾沃房地产,通过自己访问?
我明白,当访问属性的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 …