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

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

Жанры

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

Если вызывается функция, которая определена после самого вызова или находится в другом файле, то необходимо включить объявление прототипа для этой функции, которое имеет следующий общий формат. возвращаемыйТип имя (тип1 парам 1, тип2 парам2, .. )

Это указывает компилятору тип возвращаемого значения функции, число аргументов, которое она принимает, и тип каждого аргумента. Например, в строке long double power (double x, int n);

содержится объявление power как функции, которая возвращает значение типа long double и принимает два аргумента типа double и типа int. Имена аргументов внутри круглых скобок на самом деле являются фиктивными именами, и они могут быть опущены, то есть long double power {double, int); означает то же самое.

Если компилятор уже встретил определение функции или объявление про-тотипа для этой функции, то при вызове функции тип каждого аргумента пре-образуется (там, где возможно) в соответствии с типом, который объявлен в функции.

Если компилятор не встретил ни определения функции, ни объявления про-тотипа, то он предполагает, что функция возвращает значение типа int, автома-тически преобразует все аргументы типа float в тип double и выполняет целочисленное расширение любых целых аргументов, как описано выше в разделе «Преобразование базовых типов данных». Другие аргументы функции передаются без преобразования.

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

Если функция была определена в старом формате (см. выше раздел «Определение функции»), то объявление для такой функции имеет следующий формат. возвращаемыйТип имя ;

Аргументы, передаваемые такой функции, преобразуются в соответствии с описанием в предыдущем абзаце.

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

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

Имя функции без последующей пары круглых скобок создает указатель на эту функцию. К имени функции можно также применить адресный оператор, что-бы создать указатель на эту функцию.

Если fp — указатель на функцию, то соответствующую функцию можно вызвать, написав fp

или (*fp) Если функция принимает аргументы, они должны быть указаны в круглых скобках. Классы

В этом разделе приводятся сведения о синтаксисе и семантике классов. Определение класса

В определение класса включается объявление переменных экземпляра и мето-дов в секции interface, а также определение кода для каждого метода в секции implementation. Секция interface Общий формат @interface имяКласса: родительскийКласс <протокол, ...> { объявления ПеременныхЭкземлляра } объявлениеМегода объявлениеМегода @end

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

Если двоеточие и родительскийКласс не указаны, это означает, что объявляется новый корневой класс. Объявления переменных экземпляра

В необязательной секции объявленияПеременныхЭкземплярауказываются тип и имя каждой переменной экземпляра для данного класса. Каждый экземпляр класса имяКласса получаег свой собственный набор этих переменных плюс переменные, наследуемые из класса родительскийКласс. Доступ к таким переменным можно осуществлять непосредственно по имени в методах экземпляра, определенных в классе имяКласса, или из подклассов класса имяКласса. Если доступ ограничен директивой @private, то подклассы не могут осуществлять доступ к таким пере-менным (см. выше раздел «Переменные экземпляра»).

Методы класса не имеют доступа к переменным экземпляра. Объявления свойств

Общий формат @property {атрибуты) списокИмен-,

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

списокИмен — это список с разделителями-запятыми, содержащий имена свойств объявляемого типа. {тип) имяСвойства1, имяСвойства2, имяСвойстваЗ,...

Директива @property может присутствовать в любом месте секции объявления метода для класса, протокола или категории.

Табл. В.7. Атрибуты свойств Атрибут Описание assign Используется простое присваивание, чтобы задать значение переменной экземпляра в методе-установщике (setter). (Это атрибут по умолчанию.) сору Используется метод сору, чтобы задать значение переменной экземпляра. getter=имя Используется имя для имени метода-получателя (getter) вместо имени имяСвойства, которое используется по умолчанию для синтезируемого метода-получателя. nonatomic Значение может быть возвращено непосредственно из синтезируемого метода-получателя. Если этот атрибут не объявлен, то методы доступа (accessor) действуют с атрибутом atomic; это означает, что доступ к переменным экземпляра защищен блокировкой mutex. Это обеспечивает защиту в среде с несколькими потоками за счет того, что операция get или set выполняется только в одном потоке. Кроме того, по умолчанию в среде без сборки мусора синтезируемый метода-получатель будет удерживать (retain) и автоматически высвобождать (autorelease) свойство, прежде чем возвратить его значение. ~fwrite Значение свойства можно читать и задавать. Компилятор предполагает, что вы сами предоставили метод-получатель и метод-установщик (getter и setter), или он будет синтезировать оба метода, если используется директива @synthesize. retain Свойство должно удерживаться (retain) во время присваивания. Этот атрибут можно указывать только для типов Objective-C. setter=имя Используется имя для имени метода-установщика (setter) вместо заданного имени имяСвойства, которое используется по умолчанию для синтезируемого метода доступа.

Можно указывать только один из атрибутов assign, сору или retain. Если у вас не используется сборка мусора, то один из этих атрибутов должен быть использован явным образом; в противном случае вы получите предупреждение от компилятора. Если у вас используется сборка мусора и вы не указали один из этих трех атрибутов, то будет применяться атрибут по умолчанию assign. В этом случае компилятор выдаст предупреждение, только если данный класс подчиняется протоколу NSCopying (в этом случае для свойства может потребоваться атрибут сору, а не assign). Если вы используете атрибут сору, то синтезируемый метод-установщиком применяет метод сору данного объекта. Это дает немутабельную копию. Если вам требуется мутабсльная копия, то вы можете предоставить вместо этого свой собственный метод-установщик. Объявление метода

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

Проводник

Кораблев Родион
2. Другая сторона
Фантастика:
боевая фантастика
рпг
7.41
рейтинг книги
Проводник

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

Винокуров Юрий
20. Кодекс Охотника
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга ХХ

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

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

Черный рынок

Вайс Александр
6. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Черный рынок

Прорыв

Круз Андрей
3. Эпоха мертвых
Фантастика:
боевая фантастика
9.33
рейтинг книги
Прорыв

Эмиссар

Листратов Валерий
8. Ушедший Род
Фантастика:
боевая фантастика
аниме
попаданцы
7.50
рейтинг книги
Эмиссар

Идеальный мир для Лекаря 10

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

Неучтенный элемент. Том 1

NikL
1. Антимаг. Вне системы
Фантастика:
городское фэнтези
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 1

Хозяин Стужи 8

Петров Максим Николаевич
8. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Хозяин Стужи 8

Тыл-фронт

Головин Андрей
Проза:
военная проза
проза прочее
5.00
рейтинг книги
Тыл-фронт

Я Гордый часть 6

Машуков Тимур
6. Стальные яйца
Фантастика:
фэнтези
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я Гордый часть 6

Войсковые разведчики в Афгане. Записки начальника разведки дивизии

Кузьмин Николай Павлович
1. Афган: Последняя война СССР
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Войсковые разведчики в Афгане. Записки начальника разведки дивизии

Третий. Том 2

INDIGO
2. Отпуск
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 2

Мастер порталов

Лисина Александра
8. Гибрид
Фантастика:
боевая фантастика
попаданцы
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Мастер порталов