objective-c macos cocoa class metaclass

objective c - ¿Las clases se oponen en Objective-C?



macos cocoa (1)

está bien, entonces entiendo que un objeto es una instancia de una clase que debe ser asignada e inicializada, pero ¿son las mismas clases objetos?

Sé que cuando creas una nueva clase es una instancia de otra cosa, como NSObject. Entonces, si esto lo convierte en una clase, entonces los objetos pueden contener no solo variables y métodos, sino también otros objetos, ¿no?

Lo siento, esto es probablemente muy básico, pero estoy leyendo dos libros sobre cocoa y xcode y este punto es un poco confuso (probablemente debido a mi falta de experiencia en otros idiomas).


Here hay una muy buena explicación del asunto por Greg Parker

Citando:

[...] Cada clase Objective-C es también un objeto. Tiene un puntero isa y otros datos, y puede responder a los selectores. Cuando llama a un "método de clase" como [NSObject alloc], en realidad está enviando un mensaje a ese objeto de clase.

Como una clase es un objeto, debe ser una instancia de alguna otra clase: una metaclase. La metaclase es la descripción del objeto de clase, al igual que la clase es la descripción de las instancias ordinarias. En particular, la lista de métodos de la metaclase es los métodos de clase: los selectores a los que responde el objeto de clase. Cuando envía un mensaje a una clase, una instancia de una metaclase, objc_msgSend () busca en la lista de métodos de la metaclase (y sus superclases, si corresponde) para decidir a qué método llamar. Los métodos de clase se describen mediante la metaclase en nombre del objeto de clase, al igual que los métodos de instancia son descritos por la clase en nombre de los objetos de instancia.

¿Qué hay de la metaclase? ¿Es metaclases todo el camino hacia abajo? No. Una metaclase es una instancia de la metaclase de la clase raíz; la metaclase raíz es en sí misma una instancia de la metaclase raíz. La cadena isa termina en un ciclo aquí: instancia a clase a metaclass a la metaclase raíz a sí misma. El comportamiento de la metaclass isa punteros rara vez importa, ya que en el mundo real nadie envía mensajes a objetos metaclase. [...]

Lecturas interesantes adicionales:

Comprender el tiempo de ejecución de Objective-C por Colin Wheeler
(busque el párrafo titulado "Entonces, las clases definen objetos ...")

cocoawithlove.com/2010/01/… por Matt Gallagher