在線程「我如何管理內存」中,作者說:「儘管我在init和dealloc中不使用完整的表單,因爲它可能觸發KVO或產生其他副作用。」 我不明白你的意思?爲什麼不使用init和dealloc方法中的存取方法?
來源這裏http://inessential.com/2010/06/28/how_i_manage_memory
在線程「我如何管理內存」中,作者說:「儘管我在init和dealloc中不使用完整的表單,因爲它可能觸發KVO或產生其他副作用。」 我不明白你的意思?爲什麼不使用init和dealloc方法中的存取方法?
來源這裏http://inessential.com/2010/06/28/how_i_manage_memory
他指的是通過自我符號訪問您的@properties。 (取決於Xcode的版本)
用於在幕後被創建@property (nonatomic,strong) MyClass myVar;
@synthesize myVar = _myVar;
- (MyVar *)myVar
{
return _myVar;
}
- (void)setMyVar:(MyClass *)myVar
{
_myVar = myVar;
}
這些方法,當屬性被定義和/或合成的:當合成的性質,該變量的getter和setter自動爲所創建
所以當你
self.myVar = 5;
你實際上是在做[self setMyVar:5];
然而,有可能直接訪問變量,並通過使用下面的符號繞過二傳手
_myVar = 5;
例子:
@property (nonatomic,strong) MyClass myVar;
@synthesize myVar = _myVar;
- (void)someMethod
{
// All do the same thing
self.myVar = 5;
[self setMyVar:5];
_myVar = 5;
}
這篇文章的作者是建議您不要在的dealloc和init中使用getter和setter方法,但直接使用_myVar
表示法訪問該變量。
看到這個答案的有關最佳實踐等進一步的信息,但它是一個值得商榷的問題:Why shouldn't I use Objective C 2.0 accessors in init/dealloc?
這並不能解釋爲什麼*在init/dealloc中使用屬性訪問器可能存在問題(這是OP要求的)。 – 2013-04-11 12:12:20
雖然這是一個主觀問題,所以提供更多背景可能會有所幫助。 – Tim 2013-04-11 12:33:57
我覺得作者應該更小心的命名約定。
@property (nonatomic, retain) NSString *something;
應該綜合成
@synthesize something = _something;
這種方式,你可以參考self.something
使用存取方法或者_something
使用該備份該屬性的伊娃。它不太容易出錯。
而關於你的問題。當你有一個存取器時,除了在該存取器方法中設置該屬性(如通知另一個對象或更新UI)之外,你可能還在做其他事情。你可能不想在init或dealloc上這樣做。這就是爲什麼你可能想直接訪問伊娃,但情況並非總是如此。
我認爲你正在對來自不同來源的obj-c進行一些研究...... :) – 2013-04-11 12:18:09