Чтение онлайн

на главную - закладки

Жанры

Программирование на Objective-C 2.0
Шрифт:

Общий формат @interface имяКласса (имяКатегории) <протокол,...> объявлениеМетода объявлениеМетода @end

Здесь объявляется категория имяКатегории для класса имяКласса с перечислен-ными методами. Если указаны один или несколько протоколов, категория под-чиняется перечисленным протоколам.

Компилятору должно быть известно имяКласса из предшествующего объяв-ления в секции @interface для этого класса. Можно объявить любое число кате-горий влюбом числе различных исходных файлов. Перечисленные методы ста-новятся частью данного класса и наследуются подклассами.

Категории уникально определяются парами ямяКласса/имяКатегории. Например, в определенной программе может быть только одна категория NSArray (Private). Но можно использовать одинаковые имена категорий. Например, определенная программа может содержать категорию NSArray (Private) и категорию NSString (Private), и это будут различные категории.

Вы не обязаны реализовать методы категории, которые не собираетесь ис-пользовать.

Категория может только расширять определение класса дополнительными методами или переопределять существующие методы этого класса. Она не мо-жет определять какие-либо новые переменные экземпляра для этого класса.

Если в нескольких категориях объявлен методе одним и тем же именем для одного класса, то нельзя определить, какой метод будет выполняться при вы-зове. Например, в следующем примере для класса Complex определяется катего-рия с именем ComplexOps, содержащая четыре метода экземпляра. #import «Complex.h» @interface Complex (ComplexOps) -(Complex *) abs; -(Complex *) exp; -(Complex *) log; -(Complex *) sqrt; @end

Можно предположить, что где-либо будет присутствовать секция implementation, в которой реализуются один ли несколько из этих методов. #import "ComplexOps.h" @implementation Complex (ComplexOps) -(Complex *) abs { } -(Complex *) exp { } -(Complex *) log { } -(Complex *} sqrt { } @end

Категория, содержащая методы, которые будут реализоваться другими подклассами, называется неформальным (informal) протоколом или абстрактной (abstract) категорией. В отличие от формальных протоколов, компилятор не выполняет никаких проверок на подчинение неформальному протоколу. На этапе выполнения объект может проверяться на подчиненность неформальному протоколу в зависимости от конкретного метода. Определение протокола

Общий формат @protocol имяПроюкола <протокол, ...> обьявленияМетодов @optional обьявленияМетодов @required обьявленияМетодов @end

Здесь определяется протокол имяПроюкола с указанными методами. Если включены другие протоколы, то протокол имяПротокола принимает (adopt) перечисленные протоколы.

Это определение называют также определением формального протокола. Класс подчиняется (conform) протоколу имяПротокола, если в нем определяются или наследуются все обязательные (required) методы, объявленные в этом протоколе, а также все методы любых других перечисленных протоколов. Компилятор проверяет подчиненность и выводит предупреждение, если класс не подчиняется объявленному формальному протоколу. На этапе выполнения объекты могут проверяться или Tie проверяться на подчиненность формальному протоколу.

Перед списком методов, реализация которых не обязательна, может ставиться директива @optional. В дальнейшем можно использовать директиву @required, чтобы обновить список обязательных методов, которые должны быть реализованы для подчинения протоколу.

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

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

Табл. В.8. Специальные модификаторы типов в протоколах Спецификатор Описание in Аргумент относится к объекту, значение которого будет изменено отправителем и передано (т.е. скопировано) назад получателю. out Аргумент относится к объекту, значение которого будет изменено получателем и передано назад отправителю. inout Аргумент относится к объекту, значение которого будет изменяться как отправителем, так и получателем, и будет передаваться между ними; это спецификатор по умолчанию. oneway Используется для объявлений типа возвращаемого значения; обычно используется (one way void), чтобы указать, что объект, вызвавший этот метод, не обязан ожидать получения возвращаемого значения, то есть метод может выполняться асинхронно. bycopy Аргумент или возвращаемое значение должно копироваться. byref Аргумент или возвращаемое значение передается по ссылке и не копируется. Объявление объекта

Общий формат имяКласса *var1, *var2, ...;

Здесь определяются переменные varl, var2,... как объекты из класса тяКласса. Отметим, что это объявление переменных-указателей, при котором не выделяется пространство для конкретных данных, содержащихся в каждом объекте. В объявлении Fraction *myFract;

определяется myFract как объект класса Fraction или, точнее, как указатель на этот объект. Чтобы фактически выделить пространство для структуры данных класса Fraction, нужно вызвать обычно alloc или новый метод для этого класса, например, myFract = [Fraction alloc];

В результате для объекта типа Fraction будет выделен достаточный обьем па-мяти и возвращен указатель на этот объект, который будет присвоен переменной myFract. Переменную myFract часто называют объектом или экземпляром класса Fraction. Если метод alloc определен в корневом объекте, всем переменным эк-земпляра нового выделяемого объекта присваивается значение 0. Но это не оз-начает, что объект инициализирован должным образом; прежде чем использовать этот объект, для него должен быть вызван какой-либо метод инициализации (например, init).

Поскольку переменная myFract была объявлена явным образом как объект из класса Fraction, она называется переменной со статическим контролем типа. Компилятор может проверять применение переменных со статическим контролем типа на согласованность с определением класса с точки зрения правильности использования методов, а также типов их аргументов и возвращаемых значений. Объявление объекта с типом id

Общий формат id <протокол,...> varl, var2, ...;

Поделиться:
Популярные книги

Вперед в прошлое 2

Ратманов Денис
2. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 2

Воплощение Похоти 3

Некрасов Игорь
3. Воплощение Похоти
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Воплощение Похоти 3

Вернувшийся: Посол. Том IV

Vector
4. Вернувшийся
Фантастика:
космическая фантастика
киберпанк
5.00
рейтинг книги
Вернувшийся: Посол. Том IV

Наследие Маозари

Панежин Евгений
1. Наследие Маозари
Фантастика:
рпг
попаданцы
аниме
5.80
рейтинг книги
Наследие Маозари

Сильнейший Столп Империи. Книга 2

Ермоленков Алексей
2. Сильнейший Столп Империи
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 2

Слезы Эйдена 1

Владимиров Денис
11. Глэрд
Фантастика:
боевая фантастика
фэнтези
попаданцы
5.00
рейтинг книги
Слезы Эйдена 1

Переиграть войну! Пенталогия

Рыбаков Артем Олегович
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Переиграть войну! Пенталогия

Громовая поступь. Трилогия

Мазуров Дмитрий
Громовая поступь
Фантастика:
фэнтези
рпг
4.50
рейтинг книги
Громовая поступь. Трилогия

Лекарь Империи 10

Карелин Сергей Витальевич
10. Лекарь Империи
Фантастика:
городское фэнтези
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Лекарь Империи 10

Последний Герой. Том 4

Дамиров Рафаэль
Последний герой
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Последний Герой. Том 4

Целеполагание

Владимиров Денис
4. Глэрд
Фантастика:
фэнтези
боевая фантастика
рпг
5.00
рейтинг книги
Целеполагание

Хозяин оков VI

Матисов Павел
6. Хозяин Оков
Фантастика:
фэнтези
попаданцы
гаремник
5.00
рейтинг книги
Хозяин оков VI

Кодекс Охотника. Книга III

Винокуров Юрий
3. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
7.00
рейтинг книги
Кодекс Охотника. Книга III

Кодекс Крови. Книга ХIV

Борзых М.
14. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХIV