你如何分配一個對象?什麼是分配對象的正確方法?
答案
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。你怎麼看?
你如何分配一個對象?什麼是分配對象的正確方法?
答案
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。你怎麼看?
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方法創建新對象,而不是使用這種方法。
回答Ë
我幾乎從來不使用[MyClass alloc]
或[MyClass new]
,但往往[[MyClass alloc] init]
。
報價由Chuck:
最初在Objective-C,對象是新創建的。隨着OpenStep/Cocoa框架的發展,設計人員開發了這樣的觀點,即爲對象分配內存並初始化對象的屬性是不同的問題,因此應該是單獨的方法(例如,對象可能分配在特定的內存區域中)。所以對象創建的alloc-init風格受到青睞。基本上,new是舊的,幾乎不被大量使用 - 因此你會看到Cocoa類有很多init方法,但幾乎沒有任何自定義的新方法。
有什麼棘手的問題?我的意思是,沒有在Objective-C參考書中記錄的東西? –
有些人需要RTFM。 – futureelite7