2012-07-09 126 views
4

因此,我有很多自定義對象可能包含大量數據,或者根據用戶的輸入數據很少。如果只需要一點點,我顯然不希望爲大量數據創建存儲。所以我聽說過初始化,聽起來像我想要的;我只是無法讓它工作。這是我嘗試的一個示例:懶惰初始化不起作用iPhone

@synthesize name; 

... 

- (NSString *)name { 
    if (!name) name = [[NSString alloc] init]; 
    return name; 
} 

,然後其他

myObject.name = localName; 

某處如果我allocinit myObject的在它的初始名稱,然後能正常工作。但是,當我嘗試上述懶惰初始化時,對象的名稱在嘗試設置後變爲nil。我究竟做錯了什麼?

+0

ARC是否打開?這是iOS 5/4,還是手動引用計數? – Linuxios 2012-07-09 00:49:24

+0

是ARC打開了,這是iOS 5 – Garrett 2012-07-09 00:51:15

回答

3
@property (strong) NSString *name; 

@synthesize name = _name; 

- (NSString *)name { 
    if (!_name) { 
     _name = [[NSString alloc] init]; 
     ... 
    } 
    return _name; 
} 
+0

我是用這個而不是我的getter,還是我需要實現兩者? – Garrett 2012-07-09 00:52:32

+0

@Garrett,你可以在需要的時候通過self.name來訪問它 – coneybeare 2012-07-09 00:55:10

+0

這與OP在問題中的功能不同 - 如果沒有指定變量名稱,那麼@ @ synthesize'會創建它,其名稱與財產。你能解釋爲什麼你認爲這會有幫助嗎? – 2012-07-09 01:05:30