2009-10-21 61 views
1

有一件事我有點不清楚的是這些方法的NSMutableArray之間的區別:Cocoa-Touch。這些NSMutableData方法之間究竟有什麼區別?

// Class Method Style 

NSMutableData *myMutableDataInstance = [NSMutableData dataWithLength:WholeLottaData]; 

// Instance Method Style 

NSMutableData *myMutableDataInstance = nil; 

myMutableDataInstance = [[[NSMutableData alloc] initWithLength:WholeLottaData]] autorelease]; 

引擎蓋下,什麼eactly是類方法,在這裏做什麼?它與實例方法有什麼不同?

乾杯, 道格

+1

順便說一句,這些方法屬於NSMutableData,而不是NSMutableArray – Vladimir 2009-10-21 11:53:03

+0

哎呀。我編輯了這個問題。感謝您的支持。 – dugla 2009-10-21 12:36:02

回答

5

類方法創建和自動釋放一個NSMutableArray對象。

實例方法初始化您必須自己分配的對象。你寫的代碼實際上不會做任何事情,因爲myMutableArrayInstancenil。類方法是大致相同的:

NSMutableArray *myMutableArrayInstance = [NSMutableArray alloc]; 
[myMutableArrayInstance initWithCapacity:WholeLottaData]; 
[myMutableArrayInstance autorelease]; 

正如彼得Hosey在評論中指出,它的真正含義是:

NSMutableArray *myMutableArrayInstance = [[[NSMutableArray alloc] 
              initWithCapacity:WholeLottaData] 
              autorelease]; 

這將有與上述不同的結果,如果initWithCapacity:方法返回一個不同的對象。

+1

或者,更準確地說,'[[[[NSMutableArray alloc] initWithCapacity:WholeLottaData] autorelease]'。請記住'init'方法可以返回一個不同的實例,或者釋放接收者並返回'nil'(在這之後,你正在傳遞一個釋放對象)。 – 2009-10-21 12:08:20

+0

是的。早上7點輸入問題相當容易出錯;-)。我編輯了這個問題。我明白了,所以這兩種口味都會做一個分配,這正是我真正想知道的。一般來說,我可以假設這種類型的所有類方法 - 基本上集合和NSMutableData - 返回一個自動釋放對象?謝謝,克里斯托弗。 – dugla 2009-10-21 12:41:03

+0

是的,返回新實例的類方法將返回自動釋放對象。 – 2009-10-21 13:08:10

相關問題