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