Когда NSObject не будет указан как родительский класс?

StackOverflow https://stackoverflow.com/questions/1066769

  •  21-08-2019
  •  | 
  •  

Вопрос

Например:

@interface Fraction: NSObject {
...

Когда бы не NSObject использоваться и является NSObject окончательный родительский класс для всех остальных классов?

Пожалуйста, не стесняйтесь поправлять меня за любую неправильную терминологию.

Это было полезно?

Решение

Если бы я писал подкласс NSView, я бы написал:

@interface Fraction: NSView {...

потому что мой класс наследуется от NSView.Классы в Objective-C наследуются только от одного родительского класса.Продвигаясь вверх по цепочке от NSView (к его родительскому классу NSResponder), вы обнаружите, что в конечном итоге он наследуется от NSObject.

Я не уверен насчет второй части вашего вопроса.Я думаю, что все классы в Apple Cocoa Frameworks в конечном итоге наследуются от NSObject, но не цитируйте меня по этому поводу.В Objective-C нет причин, по которым не может быть других корневых объектов (иначе Objective-C использовался бы только в системах Apple).Однако в Cocoa корнем является NSObject.

Другие советы

Если вы изучите дерево классов среды выполнения в любом приложении Cocoa, вы обнаружите пять корневых классов:NSObject, Object, NSProxy, NSMessageBuilder и НСЗомби.

Большинство обычных объектов в вашем приложении будут потомками NSObject.Object — это исходный корневой класс с первых дней существования Objective-C, который был заменен NSObject, когда NeXT разрабатывала Enterprise Objects Framework.

NSMessageBuilder используется средой выполнения для пересылки сообщений.NSProxy используется реализацией распределенных объектов для обработки сообщений для отправки объектам в других процессах или даже на других хостах. НСЗомби — это класс, используемый для устранения утечек памяти.

Какао имеет два корневых класса:НСОбжект и НСПрокси.

NSObject — это корневой класс почти всех объектов Cocoa.

NSProxy — это абстрактный суперкласс, определяющий API для объектов, которые действуют как дублеры для других объектов или для объектов, которые еще не существуют, и является корневым классом для таких классов, как NSDistantObject.

Оба класса реализуют протокол NSObject.

Также возможно написать свои собственные классы Objective C, не имеющие корневого класса, но вы, вероятно, никогда этого не сделаете, и вы не сможете использовать его с Cocoa для чего-либо, если вы также не реализуете протокол NSObject. и даже тогда это будет иметь сомнительную пользу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top