2009-10-02 97 views
2

在我的代碼的一個分支,我先前使用這個這些NSMutableArray初始化如何不同?

NSMutableArray *array1 = [[NSMutableArray alloc] init]; 

使用上述陣列填充UITableVew。

只是因爲,我切換到以下幾點:

NSMutableArray *array1 = [NSMutableArray arrayWithCapacity:0] 

我再沒其他更改我的代碼)和我的應用程序崩潰時,我嘗試向下滾動在UITableView的列表。

它看起來像我的數組沒有正確初始化。有人可以解釋爲什麼會發生?這兩種方法對底層內存空間的分配方式不一致嗎?

+0

「init」的對應便捷方法是'[NSMutableArray array]' – newacct 2009-10-02 19:58:31

回答

2

你的第二行代碼沒有保留導致崩潰的NSArray。致電arrayWithCapacity:後,您需要致電[array1 retain]

有相當多的在這個崗位有用的信息:Understanding reference counting with Cocoa/Objective C

一般來說,如果你調用一個類的方法,它不是以「新」或「初始化」(如arrayWithCapacity),你通常可以假定返回的對象將被自動釋放。