我了解訪問屬性的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];加里。
3 回答

一只名叫tom的貓
TA貢獻1906條經驗 獲得超3個贊
如果您具有ivar的已定義屬性,則應使用它而不是直接訪問ivar。這就允許子類重寫setter / getter并做一些與從ivar中獲取值不同的事情。
唯一的例外是init方法和dealloc。

牧羊人nacy
TA貢獻1862條經驗 獲得超7個贊
使用
[[self foundArray] addObject:eachObject];
您只需向getter方法添加額外的調用,我認為在大多數情況下這是不必要的。另一方面,除非您實現自己的自定義getter并做一些奇怪的事情,否則此構造的開銷很小,因此在我看來,這實際上只是樣式問題。(我個人不會在這里使用財產)

慕俠2389804
TA貢獻1719條經驗 獲得超6個贊
使用self.ivar也有一些內存清理問題。尤其是 您保留了其他階級擁有的財產。然后,您將獲得任何新對象,并想要更改對self.ivar = newObject的引用。如果不使用self.ivar,則當newObject也由他人擁有時,它可能具有錯誤的訪問權限。默認的setter會檢查引用(如果不是nil),則釋放舊值并將新的ivar設置為其新值。今天我在沒有對象的情況下使用沒有自我的東西,并且陷入了這個問題。簡而言之,如果對象是共享的,請使用self.ivar ...
- 3 回答
- 0 關注
- 462 瀏覽
添加回答
舉報
0/150
提交
取消