Objective-C のレガシー バージョンでは、objc_class 構造体は次のように実装されます。
struct objc_class {
Class isa;
Class super_class;
const char *name;
long version;
long info;
long instance_size;
struct objc_ivar_list *ivars;
struct objc_method_list **methodLists;
struct objc_cache *cache;
struct objc_protocol_list *protocols;
};
したがって、オブジェクトを表す構造体は、オブジェクトのクラスへのポインター、オブジェクトのスーパー クラスへのポインター、オブジェクトのクラス名、オブジェクトのバージョン、情報とインスタンス サイズ、オブジェクトのインスタンス変数リスト、オブジェクトのメソッド リスト、オブジェクトのキャッシュとオブジェクトのプロトコル リスト。オブジェクトを表す構造体にこれらのフィールドが存在することは、それぞれがオブジェクトに関する情報を格納しているため、かなり理解できます。
ただし、同じ struct objc_class の Objective-C 2.0 実装は次のようになります。
struct objc_class {
Class isa;
};
したがって、このバージョンの objc_class では、構造体にフィールドが 1 つしかありません。それは、オブジェクトのクラス構造体へのポインターです。
私の質問は、オブジェクトを表す構造体に 1 つのフィールドしかないため、Objective-C 2.0 に格納されているオブジェクトに関する他の情報はどのようになっているのでしょうか?