Какие существуют root классы в iOS? Для чего нужны root классы?
Суть
Root class — класс без суперкласса, вершина иерархии. Он даёт всем наследникам базовый контракт с рантаймом: isa, alloc/init/dealloc, подсчёт ссылок, интроспекцию (class, isKindOfClass:, respondsToSelector:), isEqual:/hash, description, forwarding. В Foundation два root-класса:
NSObject— корень почти всего. Класс реализует протоколNSObject(в Swift —NSObjectProtocol), в котором и описан этот базовый контракт.NSProxy— абстрактный «заглушка-объект», который реализует только минимум из протоколаNSObjectи не имеетinit. Любое сообщение, которого у него нет, попадает вmethodSignatureForSelector:+forwardInvocation:— он создан, чтобы перенаправлять сообщения реальному объекту: lazy loading, распределённые объекты (NSDistantObject), моки, логирование.
Технически можно объявить и свой root-класс (__attribute__((objc_root_class)) или макрос NS_ROOT_CLASS), но тогда вы сами пишете alloc, retain/release и т. д. — на практике так не делают.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep