Czy obiekty klas są w Objective-C?

Ok, rozumiem, że obiekt jest instancją klasy, która musi być przydzielona i zainicjalizowana, ale czy same klasy są obiektami?

Wiem, że kiedy tworzysz nową klasę, jest to instancja czegoś innego, np. NSObject. Więc, jeśli to czyni ją klasą, wtedy obiekty mogą przechowywać nie tylko zmienne i metody, ale również inne obiekty, prawda?

Przepraszam, to jest chyba naprawdę podstawowe, ale czytam dwie książki o cocoa i xcode i ten punkt jest trochę niejasny (prawdopodobnie z powodu mojego braku doświadczenia w innych językach).

Author: Regexident, 2011-04-25

1 answers

Tutaj jest całkiem dobre wyjaśnienie sprawy przez Grega Parkera

Cytowanie:

[...] Każdy cel - Klasa C jest również obiekt. Posiada wskaźnik isa i innych danych i może odpowiadać na selektory. Gdy zadzwonisz do " klasy method " podobnie jak [NSObject alloc], jesteś faktycznie wysyłając wiadomość do tego obiekt klasy.

Ponieważ klasa jest obiektem, musi być instancja innej klasy: a metaclass. Metaklas jest opis obiektu klasy, tylko tak jak klasa jest opisem zwykłe przypadki. W szczególności lista metod metaclass jest klasą metody: selektory, które Klasa obiekt odpowiada. Kiedy wysyłasz message to a class-instancja a metaclass-objc_msgSend() wygląda poprzez listę metod metaklasy (i jej superklasy, jeśli any), aby zdecydować, jaką metodę wywołać. Metody klasowe są opisane przez metaclass w imieniu klasy obiekt, tak jak przykładowe metody to opisane przez klasę w imieniu obiekty instancji.

A co z metaklasą? Czy to metaklasy aż w dół? Nie. A metaclass jest instancją roota metaclass klasy; metaclass root jest instancją korzenia metaclass. Łańcuch isa kończy się na cykl tutaj: instancja do klasy do metaklasy do rootowania metaklasy do siebie. Zachowanie wskaźników metaklasycznych rzadko się liczy, ponieważ w prawdziwym świat nikt nie wysyła Wiadomości do obiekty metaklasowe. [...]

Kolejne ciekawe odsłony:

Zrozumienie Runtime Objective-C by Colin Wheeler
(Szukaj akapitu zatytułowanego " więc klasy definiują obiekty...")

Czym jest meta-klasa w Objective-C? by Matt Gallagher

 33
Author: Regexident,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-24 20:39:23