2011-08-22 94 views
0

我是Objective C的新手。我對內存分配有一點疑問。內存分配在obj c

如果我們聲明&一個的NSArray像這樣的分配內存:

NSArray * arr = [[NSArray alloc]init]; 

多少內存將爲陣列arr分配?

回答

3

嗯。如果你的意思是NSArray,那麼該數組將是空的,沒有元素將被存儲在其中,因此無論如何,只需要少量內存就可以用於任何Objective C對象。 (確切的內存量是一個實現細節)。但一個空的NSArray不能修改是沒有太大用處的,所以我想你的意思是NSMutableArray。對於NSMutableArray,陣列最初將是空的,但它可能仍然分配一些額外的內存(它很可能會),因爲Objective C預計數組會增加,並且如果有新元素添加到數組已經在嚴格需要的基礎上分配了一些內存。分配的額外內存的確切數量也是一個實現細節。

如果您想確保您的陣列佔用儘可能少的內存,您可以使用[[NSMutableArray alloc] initWithCapacity:x],其中x是您打算放入陣列中的元素的最大數量。它仍然具有零大小,但Objective C會假定您將遲早添加x元素,因此它會分配一個足以支持x對象的後備存儲。

+0

thanx for ur reply,NSArray * arr = [[NSArray alloc] init];在這種情況下,Wats它生病的最大數量的元素?它會導致內存泄漏? – Ravi

+0

無;它不會接受任何元素,因爲「NSArray」是不可變的且是空的。是的,它會導致內存泄漏,因爲Objective C爲了簿記目的分配了幾個字節(例如,存儲數組的引用計數),並且您從不釋放它。 –