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

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

Жанры

Программирование на 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. Варяг
Фантастика:
альтернативная история
9.15
рейтинг книги
Князь

Оживший камень

Кас Маркус
1. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Оживший камень

An ordinary sex life

Астердис
Любовные романы:
современные любовные романы
love action
5.00
рейтинг книги
An ordinary sex life

Жизнь, которой не было

Денис Палимов
1. Жизнь, которой не было
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Жизнь, которой не было

Первый среди равных. Книга XII

Бор Жорж
12. Первый среди Равных
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Первый среди равных. Книга XII

Матабар VIII

Клеванский Кирилл Сергеевич
8. Матабар
Проза:
магический реализм
5.00
рейтинг книги
Матабар VIII

Двойник короля 12

Скабер Артемий
12. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 12

Аристократ из прошлого тысячелетия

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

Андер Арес

Грехов Тимофей
1. Андер Арес
Фантастика:
рпг
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Андер Арес

Законы Рода. Том 4

Мельник Андрей
4. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 4

Вечный. Книга I

Рокотов Алексей
1. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга I

Государь

Мазин Александр Владимирович
7. Варяг
Фантастика:
альтернативная история
8.93
рейтинг книги
Государь

Законы Рода. Том 6

Мельник Андрей
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6