2010-06-23 2 views
2

Вы можете увидеть следующее NSObject.h файлКак понять NSObject, это как протокол и интерфейс

// 1. Вот протокол

@protocol NSObject 

// 2. здесь интерфейс , в соответствии с вышеприведенным протоколом

@interface NSObject <NSObject> { 
    ... 

// 3. в чем смысл "()" ниже? NSCoderMethods является протоколом

@interface NSObject (NSCoderMethods) 

NSObject настолько важно, что мне нужно, чтобы понять, почему он предназначен, как это?

ответ

4

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.

+0

Большое спасибо. В Java есть объект, очень похожий на NSObject. Все классы Java наследуются от Object. В ObjectC необходимо явно наследовать от NSObject. – Forrest