На самом деле это «ловушка», в которую попадают люди, мигрирующие с языков стилей C # или Java. Вы просто не указываете суперкласс при объявлении своего класса, т.е.
@interface MyNewRoot {
Class isa;
}
@end
против
@interface MyObject : NSObject {
}
@end
В Java или C # они будут эквивалентны (в первом случае компилятор будет предполагать, что System.Object или java.lang.Object был суперклассом), но в Objective-C такой стандарт по умолчанию не предполагается, и, следовательно, новый корень создан.
Однако теперь вы отвечаете за ряд функций для вашего класса, которые вы обычно принимаете как должное (даже такие простые вещи, как управление памятью для выделения или уничтожения новых экземпляров и т. Д.). Это то, на что намекает цитируемый вами комментарий, когда он говорит о struct objc_object, переменной экземпляра isa и т. Д.