/ / allocはObjective Cでどのように機能しますか? -Objective-C

Objective Cのallocはどのように動作しますか? - objective-c

allocは、クラスのオブジェクトを作成し、その「isa」ポインタをクラスにポイントし、実行時にメッセージがどのようにマップされるかを示すクラスメソッドであることを知っています。

allocWithZoneとゾーンについてのアイデアがあります。

誰も私に言うか、説明する素敵なリンクを教えてくれますか?

どのようにポインタが正しいクラスを指しているのですか?

どのくらいのメモリが割り当てられていますか?

親クラスから継承されたメンバーのメモリはどのように作成されますか?

idがobjc_object *のtypedefである場合、何が行われますかisaポインターが指す場合、isaポインターはメソッドのセレクターがあるディスパッチテーブルに到達しますが、どのデータメンバーがそこにいると思われるかを示すものがあるので、どのようにanyobjectを保持しますか?

回答:

回答№1は8

コンパイラは、objcランタイムを介して、バックグラウンドで呼び出しを挿入します。ライブラリはインクルードパスで見つけることができます objc/. objc/runtime.h おそらく最も興味があるでしょう。ボーナスとして、いくつかの一般的なメッセージのバイパスを選択します objc_msgSend これらの挿入で。

isaポインタはどのようにして適切なクラスを指していますか?

objc_constructInstance

どのくらいのメモリが割り当てられていますか?

class_createInstance
class_getInstanceSize

親クラスから継承されたメンバーのメモリはどのように作成されますか?

メモリがゼロになり、 isa 設定されています。

idがobjc_object *のtypedefである場合、何をしますかisaポインターが指している場合、isaポインターはメソッドのセレクターを持つディスパッチテーブルに移動するので、どのようにオブジェクトを保持しますか?

初期化時に設定されたものは何でも。 ObjCオブジェクトポインターは、生のメモリです。他の言語とは異なり、記述された型のキャストと変換は、変数のアドレスの直接のセットです。次の構成では、メモリ内に明示的な型の昇格または変換はありません。

MONDisplay * display = [NSString string];
NSLog(@"%@", display);

ポインタは、によって返されるのと同じ値です [NSString string].


回答№2の場合は1

ディスカッションに追加するだけで、 Objective-Cの内部に関する他の同様の質問の1つに非常に良いリンクを受け取りました。

http://algorithm.com.au/downloads/talks/objective-c-internals/objective-c-internals.pdf

これがここに到着した多くの人に役立つことを願っています:)