Интернет магазин китайских планшетных компьютеров



Компьютеры - Objective-C - Протоколы

06 июля 2011


Оглавление:
1. Objective-C
2. Синтаксис языка
3. Создание новых классов
4. Как работает механизм сообщений
5. Протоколы
6. Обработка исключений
7. Создание и уничтожение объектов
8. Управление памятью
9. Категории
10. Class objects и Objective-C runtime
11. Разное



Язык Objective-C содержит полноценную поддержку протоколов. Протокол представляет собой просто список описаний методов. Объект реализует протокол, если он содержит реализации всех методов, описанных в протоколе.

Протоколы удобны тем, что позволяют выделять общие черты у разнородных объектов и передавать информацию об объектах заранее неизвестных классов.

Простейшее описание протокола выглядит следующим образом:

@protocol ProtocolName
method declarations
@end

Так протокол Serializable может быть описан следующим образом:

@protocol Serializable
-    initWithCoder:  coder;
-  encodeWithCoder:  coder;
@end

Протокол может быть унаследован от произвольного количества других протоколов:

@protocol MyProto <Protocol1, Protocol2, Serializable, Drawable>

Точно также можно при описании класса задать не только родительский класс, но и набор протоколов:

@interface MyClass : SuperClass <Protocol1, Protocol2, Serializable, Drawable>

Для проверки во время выполнения программы, поддерживается ли объектом заданный протокол объектов, можно использовать сообщение conformsToProtocol::

if ] )
     ;

Кроме того, имя протокола можно использовать при описании переменных для явного указания компилятору о поддержке соответствующими объектами протокола.

Так, если переменная myObject содержит указатель на объект заранее неизвестного класса, но при этом удовлетворяющий протоколам Serializable и Drawable, то её можно описать следующим образом:

id <Serializable,Drawable>  myObject;

Точно так же, если заранее известно, что myObject будет содержать указатель на объект, унаследованный от класса Shape и поддерживающего протокол Serializable, то эту переменную можно описать следующим образом:

Shape <Serializable>  *myObject;

Обратите внимание, что подобное описание служит только для сообщения компилятору, какие сообщения поддерживает данный объект.

Как и классы, все протоколы в Objective-C представлены при помощи объектов:

Protocol * myProto = @protocol ;

Для предварительного объявления протоколов можно использовать следующую конструкцию:

@protocol MyProto, Serializable, Drawable;

Эта конструкция сообщает компилятору о том, что MyProto, Serializable и Drawable являются именами протоколов, которые будут определены позже.



Просмотров: 10691


<<< Mission Control
Photo Booth >>>