Что означает «классы не являются объектами»?
В точности как это звучит. В некоторых языках сами классы также являются объектами , которым вы можете отправлять сообщения. Например, чтобы создать экземпляр класса (т.е. новый объект), вы отправляете классу сообщение +alloc
(а затем обычно отправляете полученному объекту сообщение -init
:
Foo *newFoo = [[Foo alloc] init];
Разве это не всегда так?
Нет. См. Выше. См. Также Является ли класс объектом объектно-ориентированного языка и Являются ли классы объектами в Objective- C? . Примеры помимо Objective- C включают Smalltalk, Scheme и Dylan.
Что означает для класса быть объектом?
Это означает, что вы можете работать с классом так же, как и с любым другим объектом. Детали зависят от языка. В Objective- C, класс является объектом, потому что он является экземпляром метакласса Class
. Objective- C делает различие между методами экземпляра , то есть сообщениями, которые могут быть отправлены экземпляру класса, и методы класса , т.е. сообщения, которые могут быть отправлены классу сам. Например, очень часто имеется общий экземпляр класса и метод класса, который получает этот общий объект:
NSFileManager *fileManager = [NSFileManager defaultManager];
Обратите внимание, что мы на самом деле не выделяем здесь объект, а просто запрашиваем у класса общий экземпляр (которым управляет класс), который может существовать или не существовать (если нет, класс обычно создает его).