Являются ли объекты классов в Objective-C? - PullRequest
23 голосов
/ 25 апреля 2011

хорошо, так что я понимаю, что объект является экземпляром класса, который должен быть выделен и инициализирован, но сами классы являются объектами?

Я знаю, что когда вы создаете новый класс, это экземпляр чего-то другого, например, NSObject. Итак, если это делает его классом, то объекты могут содержать не только переменные и методы, но и другие объекты, верно?

Извините, это, вероятно, действительно просто, но я читаю две книги о какао и xcode, и этот момент немного неясен (вероятно, из-за моего отсутствия опыта работы на других языках).

1 Ответ

34 голосов
/ 25 апреля 2011

Здесь - довольно хорошее объяснение этого вопроса Грегом Паркером

Цитирование:

[...] Каждый класс Objective C также является объект. Имеет указатель isa и другие данные, и могут отвечать на селекторы. Когда вы называете "класс метод ", как [NSObject alloc], вы на самом деле отправив сообщение на что объект класса.

Поскольку класс является объектом, он должен быть экземпляр какого-то другого класса: метаклассом. Метакласс является описание объекта класса, просто как класс это описание обычные случаи. В частности, Список методов метакласса - это класс методы: селекторы этого класса объект отвечает. Когда вы отправляете сообщение для класса - экземпляр метакласс - objc_msgSend () выглядит через список методов метакласс (и его суперклассы, если любой) решить, какой метод вызвать. Методы класса описываются метакласс от имени класса объект, как методы экземпляра описывается классом от имени объекты экземпляра.

А как насчет метакласса? Это метаклассы все время вниз? № А метакласс является экземпляром корня метакласс класса; корневой метакласс сам по себе является экземпляром корня метаклассом. Цепочка ISA заканчивается в цикл здесь: экземпляр в класс метакласс, чтобы корень метакласса себе. Поведение метакласса - это указатели редко имеет значение, так как в реальном мир никто не отправляет сообщения объекты метакласса. [...]

Далее интересно читать:

Понимание времени выполнения Objective C Колином Уилером
(найдите абзац под названием «Так классы определяют объекты…»)

Что такое мета-класс в Objective-C? Мэтта Галлахера

...