W starszej wersji Objective-C, struct objc_class jest realizowany tak:W jaki sposób zmienne i metody instancji są przechowywane w obiekcie Objective-C 2.0?
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;
};
Tak, struct, który reprezentuje obiekt przechowuje wskaźnik do klasy obiektu, wskaźnik do super klasy tego obiektu , nazwa klasy obiektu, wersja obiektu, rozmiar informacji i instancji, lista zmiennych instancji obiektu, lista metod obiektu, pamięć podręczna obiektu i lista protokołów obiektu. Obecność tych pól w strukturze reprezentującej obiekt jest całkiem zrozumiała, ponieważ każda z nich przechowuje informacje o obiekcie.
Jednak realizacja tego samego struct objc_class Objective-C 2.0 to tak:
struct objc_class {
Class isa;
};
Tak więc, w tej wersji objc_class, jest tylko jedno pole w struct: wskaźnik do obiektu klasa struct.
Moje pytanie brzmi: w jaki sposób są inne informacje o obiekcie przechowywanym w Objective-C 2.0, ponieważ w strukturze znajduje się tylko jedno pole reprezentujące obiekty?
Interesujące czytanie: [\ [objc explain \]: Non-fragile ivars] (http://www.sealiesoftware.com/blog/archive/2009/01/27/objc_explain_Non-fragile_ivars.html) –