我想下面的方法我用它來創建對象的批判:創建對象
在接口文件:
MyClass * _anObject;
...
@property (retain, nonatomic) MyClass * anObject;
在實現文件:
@property anObject = _anObject
到目前爲止,這麼簡單。現在讓我們來替代默認的getter:
(MyClass *) anObject {
if(_anObject == nil) {
self.anObject = [[MyClass alloc] init];
[_anObject dowWhateverInitAction];
}
return _anObject;
}
編輯: 我原來的問題是關於只創建(而不是在整個生命週期)的對象,但我添加以下,這樣它不」 Ť通過關閉任何一個:
- (void) dealloc {
self.anObject = nil;
}
/EDIT
的工作的主要一點是,設置器吸氣劑的內部使用。我已經將它用於所有類型的對象(ViewController,其他類型等)。我得到的優點是:
- 僅在需要時才創建對象。它使應用相當快 (例如,在應用中有6-7個視圖,只有一個在 開始創建)。
- 我不必擔心在使用它之前創建對象......它會自動發生。
- 我不必擔心第一次需要對象的位置......我只能訪問對象,就好像它已經存在一樣,如果不存在,它就會被創建爲新的。
問題:
- 是否恰好是一個既定的模式?
- 你看到這樣做的缺點嗎?
很常見的模式,通常稱爲延遲初始化。 – omz
你打開ARC嗎?如果你不這樣做,那麼就有內存泄漏。在用'self.anObject'語法將實例變量賦值給''[MyClass alloc] init]'後,你需要釋放你創建的對象。你在做什麼是大多數情況下推薦的模式。 –
我個人不喜歡帶副作用的吸氣劑。是的,懶加載是常見的,但我完全不會使用它遍佈我的應用程序,但只能用於包含許多子視圖的視圖(已由UIViewController完成)。 – Till