Протоколы языка

Objective-C

Протоколы описывают методы, которые могут быть реализованы каким-либо классом. Это подобно объявлению интерфейсов в C++ для построения COM модели.

Цели для которых используются протоколы:

  • Ожидание, что класс поддерживающий протокол выполнит описанные в протоколе функции
  • Поддержка протокола на уровне объекта, не раскрывая методы и реализацию самого класса
  • В виду отсутствия множественного наследования - объединить общие черты нескольких классов

Формальные протоколы

Объявление формального протокола гарантирует, что все методы объявленные протоколом будут реализованы классом

Простейшее описание протокола:


@protocol ProtocolName
method declarations
@end

За словом @protocol следует перечисление методов, также как и в обычном объявлении методов класса

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

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

Добавление поддержки протокола к классу

Чтобы указать классу о поддержке определенного протокола необходимо включить заголовочный файл протокола в файл описания класса, и после в <скобках, через запятую>перечислить протоколы:


#import "protocolName.h"
@interface MyClass : SuperClass <protocolName>
описание класса
@end

В файле реализации класса необходимо реализовать все методы которые описывает протокол! Но - в Objective-C 2.0 добавлены еще два новых модификатора @optional и @required:


@protocol asdfg
- (void) readMy;

@optional
- (void) saveReadMy;
- (NSString*) loadReadMy;

@required
- (NSInteger) countReadMy;
@end
Данный протокол показывает, что протокол asdfg дожен реализовать методы readMy и countReadMy, а методы saveReadMy и loadReadMy необязательны к реализации.

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

 
 
homeЗаметили ошибкукарта сайта 
   Made on a Mac