iVar属性,通过自我访问?

时间:2010-11-03 15:39:11

标签: iphone objective-c cocoa-touch

据我所知,当访问属性的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];

加里。

4 个答案:

答案 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 ...