iVar财产,可以通过自我获得?

我了解访问属性的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];

加里。


阿波罗的战车
浏览 414回答 3
3回答

一只名叫tom的猫

如果您具有ivar的已定义属性,则应使用它而不是直接访问ivar。这就允许子类重写setter / getter并做一些与从ivar中获取值不同的事情。唯一的例外是init方法和dealloc。

牧羊人nacy

使用[[self foundArray] addObject:eachObject];您只需向getter方法添加额外的调用,我认为在大多数情况下这是不必要的。另一方面,除非您实现自己的自定义getter并做一些奇怪的事情,否则此构造的开销很小,因此在我看来,这实际上只是样式问题。(我个人不会在这里使用财产)

慕侠2389804

使用self.ivar也有一些内存清理问题。尤其是 您保留了其他阶级拥有的财产。然后,您将获得任何新对象,并想要更改对self.ivar = newObject的引用。如果不使用self.ivar,则当newObject也由他人拥有时,它可能具有错误的访问权限。默认的setter会检查引用(如果不是nil),则释放旧值并将新的ivar设置为其新值。今天我在没有对象的情况下使用没有自我的东西,并且陷入了这个问题。简而言之,如果对象是共享的,请使用self.ivar ...
打开App,查看更多内容
随时随地看视频慕课网APP