2012-06-25 107 views
-5

你如何分配一個對象?什麼是分配對象的正確方法?

答案

a. MyClass *obj = malloc(sizeof(MyClass)); 
b. MyClass *obj = [MyClass alloc]; 
c. MyClass *obj = alloc(MyClass); 
d. MyClass *obj = [MyClass new]; 
e. None of the above. 

我想B或可以是d。你怎麼看?

+0

有什麼棘手的問題?我的意思是,沒有在Objective-C參考書中記錄的東西? –

+1

有些人需要RTFM。 – futureelite7

回答

1
a. MyClass *obj = malloc(sizeof(MyClass)); 

這是錯的。 Objective-C對象具有malloc無法制作的特定結構。這不會創建一個有效的Objective-C對象。

b. MyClass *obj = [MyClass alloc]; 

這是分配對象的正確方法。但是,在可以使用之前,所有objective-c對象都必須傳遞某種-init消息。

c. MyClass *obj = alloc(MyClass); 

d. MyClass *obj = [MyClass new]; 

這實際上是相同的[[MyClass的頁頭] INIT]。然而,由於用戶在分配新對象時無法選擇使用哪個初始化器,因此大多數書籍建議使用alloc/init方法創建新對象,而不是使用這種方法。

1

回答Ë

我幾乎從來不使用[MyClass alloc][MyClass new],但往往[[MyClass alloc] init]

報價由Chuck

最初在Objective-C,對象是新創建的。隨着OpenStep/Cocoa框架的發展,設計人員開發了這樣的觀點,即爲對象分配內存並初始化對象的屬性是不同的問題,因此應該是單獨的方法(例如,對象可能分配在特定的內存區域中)。所以對象創建的alloc-init風格受到青睞。基本上,new是舊的,幾乎不被大量使用 - 因此你會看到Cocoa類有很多init方法,但幾乎沒有任何自定義的新方法。

+0

'[MyClass new]'與調用'[[MyClass alloc] init]' – JustSid

+0

'基本相同。'[[[NSMutableArray alloc] init]'和[NSMutableArray new]'確實是一樣的。然而,類可能會使用'[[MyClass alloc] init]'覆蓋'new'實現,確保對象被分配和初始化(當然總是有例外)。 – Anne

+0

類也可以重寫'alloc',重寫'alloc'的類的數量可能與重寫'new'的類相同。 – JustSid

相關問題