2013-08-28 73 views
3

我發現自己現在懶惰的初始化我所有的功能。它只是感覺更自然,它允許我停止編寫設置功能。這是設計不好嗎?什麼是陷阱?可以懶惰初始化/加載所有對象嗎?

@property (nonatomic, strong) NSMutableArray *array1; 

-(NSMutableArray *)array1{ 
    if (!_array1){ 
     _array1 = [[NSMutableArray alloc] init]; 
    } 
    return _array1; 
} 

然後我發現自己做這樣的事情:

-(NSMutableArray *)array1{ 
    if (!_array1){ 
     _array1 = [[NSMutableArray alloc] init]; 
     // read a file 
     // [_array addObject:newObject]; 
    } 
    return _array1; 
} 
+0

沒關係,只要記得在類內部總是調用self.array1,而不是_array1。 –

+0

這樣的形式會使得將值設置爲'nil'(並且在讀取時返回'nil')是不可能的,這有時可能實際上是期望的值。如果它是一個公共API,絕對記錄這種行爲! – Kitsune

回答

1

它是,它不是。懶惰的實例化作爲一個概念很好,但你必須小心。例如,如果兩個不同的線程試圖同時訪問任何一個變量,那麼最終可能會有兩個不同的延遲實例化變量。看到這裏的答案:

Thread safe lazy initialization on iOS

1

做懶加載的一切,可能導致運行速度慢的用戶交互的了,因爲應用程序可能會忙飄飛到的東西加載到內存中。只有在需要的時候才使用它(即當一個對象需要大量內存才能完成加載..)