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

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

Жанры

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

Общий формат мТип (возвращаемыйТип) имя??1: (тип1) парам 1 имя??2: (тип2) парам2, ...;

Объявляется метод имя 1:имя2:.., который возвращает значение типа возвраща-емыйТип; он имеет формальные параметры парам1, парам2\ ларам/ объявляется с типом 7ил/, парам2с типом тип2, и т.д.

Любое из имен после имя/ (то есть имя2,...) можетбыть опущено; в этом слу-чае все же используется двоеточие в качестве заполнителя, и оно становится частью имени метода (см. следующий пример).

Если в качестве м Тил указан знак +, это означает, что объявляется метод класса, а если знак -,

то объявляется метод экземпляра.

Если объявляемый метод наследуется из родительского класса, то новое определение подавляет определение родительского класса. В этом случае все же имеется доступ к методу родительского класса, и для этого нужно передать сообщение к super. Вызов методов класса происходит, когда соответствующее сообщение передается объекту-классу, а вызов методов экземпляра происходит, когда соответствующее сообщение передается экземпляру класса. Методы класса и методы экземпляра могут иметь одинаковые имена.

Одинаковое имя метода может также использоваться в различных классах. Способность объектов различных классов реагировать на методы с одинако-выми именами называется полиморфизмом (polymorphism).

Если метод не возвращает значения, то возвращаемыйТип указы вас гея как void. Если метод возвращает значение типа id, то возвращаемыйТип можно не указывать, хотя практика надежного программирования рекомендует указы вать id к? возвращаемый тип.

Если используется ,... в качестве последнего (или единственного) параметра в списке, то метод принимает переменное число параметров, например, -(void) print: (NSSTRING *) format, ... { }

Ниже приводится пример объявления класса в секции interface: объявляется класс с именем Fraction, родительским классом для которого является NSObject. @interface Fraction: NSObject { int numerator, denominator; ) +(Fraction *) newFract; -(void) setTo: (int) n : (int) d; -(void) setNumerator: (int) n andDenominator: (int) d; -(int) numerator; -(int) denominator; @end

Класс Fraction имеет две целые переменные экземпляра с именами numerator и denominator. Он также содержит один метод класса с именем newFract, который возвращает объект типа Fraction. В него включены также два метода экземпляра с именами setTo:: и setNumerator:andDenominator:. Каждый из них принимает два аргумента и не возвращает никакого значения. В нем содержатся также два метода экземпляра с именами numerator и denominator, которые не принимают никаких аргументов и возвращают значение типа int. Секция implementation Общий формат @implementation имяКласса; определениеМетода определениеМетода ... @end

Определяется класс с именем имяКлаеса. Родительский класс и переменные экземпляра обычно не объявляются повторно в секции implementation (хотя это можно делать), поскольку они уже объявлены ранее в секции interface.

Если реализуются методы ые из какой-либо категории (см. ниже раздел «Оп-ределение категории»), то в секции implementation должны быть определены все методы, объявленные в секции interface. Если в секции interface были указаны один или несколько протоколов, то должны быть определены все методы этих протоколов — неявным образом через наследование или явным образом путем определения в секции implementation.

Каждое определениеМетода

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

Общий формат мТип (возвращаемый Тип) имя1: (тип1) парам 1: имя2(тип2) парам2, ... { обьявленияПеременных программныйОператор программныйОператор return выражение; }

Определяется метод имя1:имя2:.., который возвращает значение типа возвращаемыйТип и имеет формальные параметры парам}, парам2,....; парам} объявляется с типом тип}, парам2с типом тип2, и т.д. Если в качестве мТип указан знак +, это означает, что определяется метод класса, а если знак то определяется метод экземпляра. Это объявление метода должно быть согласовано с соответствующим объявлением метода в секции interface или с определенным ранее определением протокола.

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

Внутри метода можно использовать идентификатор self для ссылки на объект, для которого вызывается метод, то есть на получателя сообщения. Внутри метода можно использовать идентификатор super для ссылки на родительский класс объекта, для которою вызывается метод.

Если возвращаемыйТип не указан как void, то в определении метода должны содержаться один или несколько операторов relume выражениями типа возвра-щаемыйТип. Если возвращаемыйТип указан как void, использовать оператор return не обязательно, и в случае использования он не может содержать возвращаемого значения.

Ниже приводится пример определения метода, где определяется метод setNumerator:andDenominator: в соответствии с его объявлением (см. выше раздел «Объявление метода»), -(void) setNumerator: (int) n andDenominator: (int) d { numerator = n; denominator = d; }

В этом методе двум его переменным экземпляра присваиваются передавае-мые аргументы и не выполняется оператор return (хотя это можно сделать), по-скольку в объявлении метода он не возвращает никакого значения.

В объявлениях для аргументов одномерных массивов не обязательно указывать число элементов этого массива. Для многомерных массивов нужно обязательно указать размер каждой размерности, кроме первой.

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

Описание оператора return см. ниже в разделе «Оператор return». Синтезируемые методы доступа

Общий формат @synthesize свойство1, свойство2, ...

Здесь указывается, что для перечисленных свойств свойство}, свойство2,... должны быть синтезированы методы доступа.

В списке можно использовать форму записи свойство = instance_var, чтобы ука-зать, что свойство будет связано с переменной экземпляра instanceуаг. Синтези-руемые методы будут иметь характеристики, базирующиеся на атрибутах, объявленных ранее для свойства с помощью директивы @property. Определение категории

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

Я бог. Книга XXXIX

Дрейк Сириус
39. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я бог. Книга XXXIX

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

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

Мир Лема - словарь и путеводитель

Ашкинази Леонид Александрович
Фантастика:
научная фантастика
5.00
рейтинг книги
Мир Лема - словарь и путеводитель

#Бояръ-Аниме. Газлайтер. Том 37

Володин Григорий Григорьевич
37. История Телепата
Фантастика:
фэнтези
аниме
боевая фантастика
6.25
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 37

Богиня на кухне

Кинселла Софи
Проза:
современная проза
8.87
рейтинг книги
Богиня на кухне

Крылья

Крайтон Майкл
Детективы:
триллеры
7.00
рейтинг книги
Крылья

Ожог

Бэнкс Майя
3. Затаивший дыхание
Любовные романы:
современные любовные романы
эро литература
8.43
рейтинг книги
Ожог

Приключения Гаррета. том.2

Кук Глен Чарльз
Фантастика:
фэнтези
6.80
рейтинг книги
Приключения Гаррета. том.2

Пилот штрафной эскадрильи

Корчевский Юрий Григорьевич
Фантастика:
альтернативная история
5.79
рейтинг книги
Пилот штрафной эскадрильи

И тогда мы скоро полетим на Марс, если только нам это будет нужно

Павлов Алексей Андреевич
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
И тогда мы скоро полетим на Марс, если только нам это будет нужно

Том 6. Может быть — да, может быть — нет. Леда без лебедя. Новеллы. Пескарские новеллы

д’Аннунцио Габриэле
6. Габриэле Д'Аннунцио Собрание сочинений в шести томах
Проза:
классическая проза
6.25
рейтинг книги
Том 6. Может быть — да, может быть — нет. Леда без лебедя. Новеллы. Пескарские новеллы

Дважды одаренный. Том VI

Тарс Элиан
6. Дважды одаренный
Фантастика:
аниме
альтернативная история
фэнтези
фантастика: прочее
5.50
рейтинг книги
Дважды одаренный. Том VI

Экстр

Зинделл Дэвид
3. Реквием по Homo Sapiens
Фантастика:
научная фантастика
6.25
рейтинг книги
Экстр

Белый шаман

Шундик Николай Елисеевич
Проза:
советская классическая проза
6.25
рейтинг книги
Белый шаман