Stunner做了很好的解釋,不需要分配已經創建的init對象。
但是,如果它是一個不存在的對象,你將在哪裏創建它?我提到的一個非常常見的模式是因爲您在文章中提到它,它是懶惰的實例化。
所以你想要一個NSMutableArray屬性。你可以在使用它之前用某種方法分配init,但是你必須擔心「在我需要我的數組之前調用該方法嗎?」或者「我會不小心再次調用它並重新初始化它。」
所以一個故障安全的地方是在屬性的getter中。每次訪問該屬性時都會調用它。
.h
@property (nonatomic, strong) NSMutableArray* myArray;
.m
@synthesize myArray = _myArray;
- (NSMutableArray*)myArray
{
if (!_myArray) {
_myArray = [[NSMutableArray alloc] initWithCapacity:2];
}
return _myArray;
}
您訪問的財產,它說,每次「是否存在myArray的?如果不是,創建它。如果是的話,只返回我有什麼。」
此設計模式帶來的另一個好處是,您不需要創建資源,直到您需要它們,而不是一次創建它們,比如說,當您的視圖控制器加載或您的應用程序啓動時,這取決於需求,可能需要幾秒鐘。
+1非常好的問題。將消息發送到not-yet-alloc/init屬性是OjbC初學者的常見錯誤。 – Philip007 2012-10-03 06:25:52