2011-07-27 73 views
1

這是關於NSMutableArray「initWithCapacity」的實例方法。NSMutableArray initWithCapacity方法說明和內存管理

從技術文檔,返回值被描述爲:

Return Value 
An array initialized with enough memory to hold numItems objects. 
The returned object might be different than the original receiver. 

似乎是在「不同於」一個錯字,我的猜測是,它應該是「不同於」。而且,如果返回的對象確實與原始對象不同,我們是否必須擔心釋放與原始對象關聯的內存?

希望有人見地這個可以幫助...

http://developer.apple.com/library/mac/#documentation/cocoa/reference/foundation/Classes/NSMutableArray_Class/Reference/Reference.html#//apple_ref/occ/cl/NSMutableArray

回答

4

您已使用alloc創建了一個對象,並且您是responsible for the memory of that objectinitWithCapacity:可能會返回一個不同於最初來自alloc的呼叫的內存塊,這一事實不會改變這一點。

Cocoa中的初始化方法允許釋放它們傳遞的實例並創建一個新的返回。在這種情況下,initWithCapacity:需要這樣做,因爲實際上它要求它保留更多的內存,而這些內存不會被分配。

這是allocinit...應該總是成對的原因:(他在說什麼,誰知道 - 蘋果電腦的工程師)[[NSMutableArray alloc] initWithCapacity:10]

關於initWithCapacity:具體而言,bbum says that it's usually unecessary。它並不妨礙您將數組擴展超過指定的大小。它所做的只是可能允許數組進行一些初始優化*;除非你已經測量過,並且它有很大的差別,否則可能沒有必要。


*請參閱Objective-c NSArray init versus initWithCapacity:0

+0

感謝您的詳細解答,鏈接到Bbum的條目也幫助很多。 – Stanley

0

您使用包含單詞alloc那麼你是負責釋放內存的方法的任何時間。例如,如果你做了以下

NSMutableArray *myArray = [[NSMutableArray alloc] initWithCapacity:10]; 
//Store data into the array here 
//Once done you need to release the array 
[myArray release]; 

--Editied職位,因爲我想鍵入alloc和常用的init來代替。

+0

的規則並不適用於含有方法'init':http://developer.apple.com/library/mac/documentation/General/Conceptual/DevPedia-CocoaCore/MemoryManagement的.html#// apple_ref/DOC/UID/TP40008195-CH27-SW3。 'alloc'是負責內存_allocation_的方法。 –

+0

@dbslone感謝您的協助。由JC的評論提供的鏈接也是非常有用的... – Stanley

+0

我的錯誤我打算輸入alloc,但意外鍵入初始化,有點苛刻得到一個投票,但無論 – dbslone