2010-11-02 109 views
5

當我需要臨時使用數組,什麼是它們之間的區別:自動釋放與釋放

1:

NSMutableArray *stuff = [[NSMutableArray alloc] init]; 
// use the array 
[stuff release]; 

2:

NSMutableArray *stuff = [NSMutableArray array]; 
// use the array 

3:

NSMutableArray *stuff = [[[NSMutableArray alloc] init] autorelease]; 
// use the array 

我更喜歡2號,因爲它更短。有沒有充分的理由使用數字1或3?

回答

10

在大多數情況下,2號可能是最好的選擇。

1號機有可能因某種原因在某一點失去釋放,但它確實釋放了數組立即,這在內存不足的環境中可能是有用的。

3號基本上是2號的詳細等價物,但如果你想使用沒有相應arrayWith *的initWith *,它確實派上用場。

注:如果存儲器飢餓,如昂貴的循環在需要針對每次迭代新鮮陣列; 不要發佈並分配新陣列;只需使用-removeAllObjects並回收數組。

+0

謝謝!關於第1號內存立即釋放的好處。 – keronsen 2010-11-02 12:42:01

+2

在iPhone上,您會發現大多數人都使用第一號,因爲內存會很快返回到運行時。事實上,蘋果建議儘可能避免自動釋放(在iPhone上)。 – JeremyP 2010-11-02 14:32:02

+1

好的答案,保存最後一位。我敢打賭,在每次傳遞中創建新數組和刪除所有對象之間的區別是不可估量的,很有可能,刪除所有對象的速度將會微不足道。在任何情況下,直到您遇到量化的性能問題時才進行優化。 – bbum 2010-11-02 17:53:44