Существует две основные причины для создания нового корневого класса; проксирование и новая объектная модель.
При проксировании может быть полезно реализовать новый корневой класс, так что вы можете в основном обрабатывать любое и все поведение класса / объекта нестандартным способом. См. NSProxy.
Среда выполнения Objective-C достаточно гибкая, что позволяет довольно легко поддерживать новую объектную модель (где легко в первую очередь обесценивает сложность создания такого зверя). На самом деле, многие из поведений, которые считаются присущими среде выполнения - KVC, KVO и т. Д. - реализованы как часть самого класса NSObject
.
Я знаю, по крайней мере, одну компанию, которая, по крайней мере, примерно 8 лет назад, внедрила свою собственную объектную модель как часть создания механизма финансового анализа ~ 500 тыс. LOC.
Суть в том, что если вы идете по этому пути, вы не пытаетесь заставить ваши классы взаимодействовать с Foundation / CF / AppKit / UIKit и т. Д. Если вам нужен , то это , просто подкласс NSObject уже!
Интересно отметить, что NSManagedObject
фактически является корневым классом в том смысле, что он выполняет довольно серьезные пользовательские функции, но это подкласс NSObject
, поэтому подклассы NSManagedObject
могут взаимодействовать с остальными система.