Как создать корневой объект в Objective-C без NSObject? - PullRequest
5 голосов
/ 02 декабря 2009

В документации написано:

Хотя не является строго частью язык, указатель isa требуется для объекта для работы с Система выполнения Objective-C. Объект должен быть «эквивалентен» структуре objc_object (определен в objc / objc.h) в каких областях структура определяет. Тем не менее, вы редко, если когда-либо, необходимо создать свой собственный корневой объект, и объекты, которые наследуются от NSObject или NSProxy автоматически есть ISA переменная.

Хотя это звучит хорошо, мне интересно, как в любом случае будет создан корневой объект в Objective-C?

Это для целей обучения. Я просто хочу это знать. Я бы очень хотел это увидеть.

1 Ответ

7 голосов
/ 03 декабря 2009

На самом деле это «ловушка», в которую попадают люди, мигрирующие с языков стилей C # или Java. Вы просто не указываете суперкласс при объявлении своего класса, т.е.

@interface MyNewRoot {
Class isa;
}
@end

против

@interface MyObject : NSObject {
}
@end

В Java или C # они будут эквивалентны (в первом случае компилятор будет предполагать, что System.Object или java.lang.Object был суперклассом), но в Objective-C такой стандарт по умолчанию не предполагается, и, следовательно, новый корень создан.

Однако теперь вы отвечаете за ряд функций для вашего класса, которые вы обычно принимаете как должное (даже такие простые вещи, как управление памятью для выделения или уничтожения новых экземпляров и т. Д.). Это то, на что намекает цитируемый вами комментарий, когда он говорит о struct objc_object, переменной экземпляра isa и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...