据我所知,当访问属性的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 ...
OR
[foundList addObject:eachObject];
加里。
答案 0 :(得分:4)
如果你有一个ivar的已定义属性,你应该使用它而不是直接访问ivar。这允许子类覆盖setter / getter并执行不同的操作,只需从ivar中获取值。
唯一的例外是init方法和dealloc。
答案 1 :(得分:2)
使用
[[self foundArray] addObject:eachObject];
你只需要对getter方法添加额外的调用,在大多数情况下我认为这是不必要的。另一方面,除非你实现自己的自定义getter并做一些奇怪的事情,这个结构的开销非常小,所以在实践中我认为这只是风格问题。 (我个人不会在这里使用财产)
答案 2 :(得分:1)
如果您是子类,或者让其他人重复使用您的代码并且他们想要覆盖您的功能,那么访问器方法非常方便。
答案 3 :(得分:0)
使用self.ivar也存在内存清理方面的一些问题。 ESP。您保留了其他类所拥有的财产。然后你得到任何新的对象,并想要改变对self.ivar = newObject的引用。如果你不使用self.ivar,当newObject也归其他人所有时,它可能有不良访问权限。 默认的setter,检查引用,如果不是nil,则释放旧值并将新的ivar设置为其新值。 我今天在没有自我的情况下使用了对象,并陷入了这个问题。 简而言之,如果共享对象,请使用self.ivar ...