Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - 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 являются именами протоколов, которые будут определены позже. Просмотров: 11400
|