オブジェクトをどのように割り当てますか?
回答
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かもしれないと思っています。どう思いますか?
回答E
私はほとんど[MyClass alloc]
または[MyClass new]
を使用しませんが、しばしば[[MyClass alloc] init]
。
チャックによる引用:
もともとObjective-Cでは、オブジェクトはnewで作成されていました。OpenStep / Cocoaフレームワークが進化するにつれて、設計者は、オブジェクトへのメモリの割り当てとその属性の初期化は別個の懸念事項であり、したがって別個のメソッドである必要があるという意見を発展させました(たとえば、オブジェクトは特定のメモリゾーンに割り当てられる場合があります)。そのため、オブジェクト作成のalloc-initスタイルが支持されるようになりました。基本的に、newは古く、ほとんど廃止されています。したがって、Cocoaクラスには多くのinitメソッドがありますが、カスタムのnewメソッドはほとんどありません。
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 alloc] init] と同じです。ただし、ユーザーは新しいオブジェクトを割り当てるときに使用する初期化子を選択できないため、ほとんどの書籍では、これの代わりに alloc/init メソッドを使用して新しいオブジェクトを作成することを推奨しています。