to fragment Objective-C runtime programming guide
:Zrozumienie Cel C wykonawcze
Gdy tworzony jest obiekt, pamięć alokuje i jego zmienne wystąpienia są inicjalizowane. Pierwszą ze zmiennych obiektu jest wskaźnik do jego struktury klasowej. Wskaźnik ten, zwany isa, daje obiektowi dostęp do jego klasy i, poprzez klasę, do wszystkich klas, z których dziedziczy.
ISA jest zadeklarowana w NSObject
tak:
Class isa;
Z kolei Class
jest niczym więcej niż wskaźnik do struktury
typedef struct objc_class *Class;
A teraz przyjrzyjmy się tej struktury:
struct objc_class {
Class isa;
#if !__OBJC2__
Class super_class OBJC2_UNAVAILABLE;
const char *name OBJC2_UNAVAILABLE;
long version OBJC2_UNAVAILABLE;
long info OBJC2_UNAVAILABLE;
long instance_size OBJC2_UNAVAILABLE;
struct objc_ivar_list *ivars OBJC2_UNAVAILABLE;
struct objc_method_list **methodLists OBJC2_UNAVAILABLE;
struct objc_cache *cache OBJC2_UNAVAILABLE;
struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;
#endif
}
Widzimy, że wskaźnik do super klasy (jak również do wszystkich pozostałych członków struct z wyjątkiem innego isa) jest niedostępny w najnowszej wersji Objective-C.
Moje pytanie brzmi: jak obiekt może uzyskać dostęp do swojej nadklasy, jeśli wskaźnik super_class
jest niedostępny? Czy ma dostęp do nadklasy poprzez ten inny wskaźnik isa? Ale jak dokładnie to się dzieje? Jak to działa? Czy ktoś może to wyjaśnić?
Gdzie znalazłeś tę definicję? Ten plik nagłówkowy pokazuje inny: http://www.opensource.apple.com/source/objc4/objc4-208/runtime/objc-class.h – trojanfoe
znalazłem go w objc/runtime.h –
to zależy od wersja runtime Myślę, że –