1.
Это класс (интерфейс), потому что все конкретные классы в ObjC в настоящее время наследуют от реализации NSObject, чтобы поддерживать такие функции, как подсчет ссылок и во время выполнения проверки типов.
2.
Теперь для протокола ... она существует, потому что NSObject не единственный корневой класс, который поддерживает и т.д. методы -retain
и -performSelector:
.
Один важный класс - NSProxy, который действует как прокси-сервер для пересылки сообщений на некоторые фактические объекты.
Цели NSProxy обычно являются объектами NSObjects, поэтому интерфейс также должен поддерживать -retain
и -performSelector:
и т. Д. Но NSProxy не может наследовать NSObject, потому что нет is-a отношений между ними.
Чтобы выразить родственные отношения, оба сделаны для принятия того же протокола, который, к сожалению, также называется NSObject.
Создание NSObject протокол также имеет преимущество, что определенный пользователь протоколы может запрашивать усыновитель поддерживать все обычные NSObject операции по
@protocol Foo <NSObject>
...
3.
It's a category, который добавляет дополнительный метод реализации NSObject.
Большое спасибо. В Java есть объект, очень похожий на NSObject. Все классы Java наследуются от Object. В ObjectC необходимо явно наследовать от NSObject. – Forrest