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

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

Жанры

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

Если вы не подписаны на определенный набор документов вместе с Xcode, то оилайн-документация может быть более свежей, чем на вашем диске.

На этом заканчивается краткое введение в Foundation framework. Теперь мы переходим к изучению некоторых классов этого фреймворка и способам их включения в ваши приложения.

Глава 15. Числа, строки и коллекции

В этой главе описывается работа с некоторыми базовыми объектами в Foundation framework. Это числа, строки и коллекции, позволяющие работать с группами объектов в форме массивов, словарей и наборов.

Foundation framework содержит множество классов, методов и функций. В Mac OS X доступны примерно 125 заголовочных (.h) файлов. Для доступа к ним используйте следующий оператор импорта. #import <Foundation/Foundation.h>

Файл Foundation.h

импортирует практически все другие заголовочные файлы Foundation. Xcode автоматически вставляет этот заголовочный файл в вашу программу, как во всех примерах этой книги.

Однако наличие этого оператора может существенно увеличить время ком-пиляции. Чтобы избежать излишних затрат времени, используйте заранее ском-пилированные заголовочные файлы. Это файлы, заранее обработанные компи-лятором. По умолчанию во всех проектах Xcode используются заранее скомпилированные заголовочные файлы.

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

Примечание. При желании можно продолжать работу, просто импортируя Foundation.h. Но если вы хотите импортировать конкретные файлы, показанные в каждом примере, то удалите файл имя лрошз РгеАх.рсЬ, который автоматически включается системой XCode при создании нового проекта Foundation Tool. При удалении этого файла из проекта обязательно выберите «Delete References» (Удалить ссылки), когда появится запрос Xcode. 15.1. Числовые объекты

Вес числовые типы данных, с которыми мы работали до сих пор (такие, как int, float и long) это базовые типы данных в Objective-C. Они не являются объектами, мы не можем передавать им сообщения. Однако время от времени нам нужно работать с ними как с объектами. Например, объект- класса Foundation NSArray позволяет задавать массив, в котором можно сохранять значения. Эти значения должны быть объектами. В таких массивах нельзя непосредственно сохранять базовые типы данных. Вместо этого для сохранения любого из базовых числовых типов данных (включая тип данных char) служит класс NSNumber. Он позволяет создавать объекты из этих типов данных (см. программу 15.1). // Работа с числами #import <Foundation/NSObject.h> #import <Foundation/NSAutoreleasePool.h> #import <Foundation/NSValue.h> #import <Foundation/NSString.h> int main (int arge, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] initj; NSNumber *myNumber, *floalNumber, *inlNumber; NSInteger mylnt; // целое значение (int) intNumber = [NSNumber numberWithlnteger: 100]; mylnt - [intNumber integerValue]; NSLog (@"%li", (long) mylnt); // значение удвоенной длины (long) myNumber = [NSNumber numberWithlong: Oxabcdef]; NSLog (@"%lx", [myNumber longValue]); // значение типа char myNumber = [NSNumber numberWithChar: X]; NSLog (@"%c", [myNumber charValue]); // значение с плавающей точкой (float) floatNumber = [NSNumber numberWithFloat: 100.00]; NSLog (@"%g", [floatNumber floatValue]); // значение с двойной точностью (double) myNumber = [NSNumber numberWithDouble: 12345e+15]; NSLog (@"%lg", [myNumber doubleValue]); // Здесь неверный доступ NSLog (@"%Г, [myNumber integerValue]); // Сравнение двух чисел на равенство if ([intNumber isEqualToNumber: floatNumber] == YES) NSLog (@"Numbers are equal"); (Числа равны) else NSLog (@"Numbers are not equal"); (Числа не равны) // Сравнение одного числа со вторым (<, == или >) if ([intNumber compare: myNumber] == NSOrderedAscending) NSLog (@"First number is less than second"); (1-e число меньше 2-ro) [pool drain]; return 0; }

Вывод программы 15.1 100 abcdef X 100 1.2345e+19 0 Numbers are equal (Числа равны) First number is less than second (1 -e число меньше 2-го)

Файл <Foundation/NSValue.h> требуется для работы с числами из класса NSNumber. Краткий обзор автоматически высвобождаемого пула (autorelease pool)

Первая строка программы 15.1 присутствовала в каждой программе этой книги. В следующей строке выполняется резервирование пространства в

памяти для автоматически высвобождаемого пула (пула автоматического освобождения памяти, autorelease-пул), который назначается для переменной pool. NSAutoreleasePool * pool = [ [ NSAutoreleasePoolalloc] init];

Autorelease-пул автоматически освобождает память, занимаемую объектами, когда объект добавляется в этот пул. Объект добавляется в пул, когда ему передается сообщение autorelease. Когда пул высвобождается, то высвобождаются и все объекты, которые были в него добавлены. Все такие объекты ликвидируются, если для них не было указано, что они существуют вне области действия autorelease-пула (это указывается счетчиками ссылок — reference count).

Обычно вам не нужно думать о высвобождении объекта, возвращаемого ка-ким-либо методом Foundation. Иногда этим объектом владеет метод, который возвращает его. Иногда объект создается заново и добавляется в autoreiease-пул самим методом. Однако, как описывается в части I, вы все же должны высво-бождать любые объекты (включая объекты Foundation), которые создаете явным образом с помощью метода alloc, когда прекращаете их использование.

Примечание. Вы также должны высвобождать объекты, создаваемые методом сору (см. главу 17).

В главе 17 дается полное описание счетчиков ссылок, autorelease-пула и кон-цепции автоматической сборки мусора (garbage collection).

Вернемся к программе 15.1. Класс NSNumber содержит много методов, по-зволяющих создавать объекты NSNumber с начальными значениями. Например, в строке intNumber = [NSNumber numberWithlnteger: 100];

создается объект из целой переменной, значение которой равно 100.

Значение, которое считывается из объекта класса NSNumber, должно быть согласовано с типом значения объекта. Так, в следующем операторе программы выражение [intNumber integerValue]

используется для считывания целого значения, хранящегося в intNumber, и оно сохраняется в переменной mylntTHnaNSInteger. Отметим, что NSInteger - не объект, а typedef-определение для базового типа данных. Это тип long для 64-битных систем или тип int для 32-битных систем. Аналогичный оператор typecef задан для NSUInteger, чтобы работать с целыми без знака (unsigned).

При вызове NSLog выполняется приведение типа NSInteger mylnt к long. Симво-лы формата %li обеспечивают корректную передачу и вывод значен ия, даже если программа компилируется для 32-битной архитектуры.

Для каждого базового значения метод class выделяет память для объекта NSNumber и присваивает ему указанное значение. Имена этих методов начи-наются с numberWith, после чего следует тип, например, numberWithLong:, numberWithFloat: и т.д. Кроме того, можно использовать методы экземпляра, что-бы присвоить объекту NSNumber (для которого была выделена память) указанное значение. Имена этих методов начинаются с initWith, например, initWithLong: и initWithFloat:.

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

Табл. 15.1. Методы создания и считывания значений объектов NSNumber Метод,класса для создания и инициализации Метод экземпляра для инициализации Метод экземпляра для считывания numberWithChar: InitWithChar: charValue numberWthUnsignedChar: initWthUnsignedChar: unsignedCharValue numberWithShort: initWithShort: shortValue numberWithUnsignedShort: initWithllnsignedShort: unsignedShortValue numberWithlnteger: initWithlnteger: integerValue numberWithUnsignedlnteger: initWithllnsignedlnteger: unsignedlntegerValue numberWithlnt: initWithlnt: intValueunsigned numberWithllnsignedlnt: initWithUnsignedlnt: unsignedlntValue numbefWithLong: initWithLong: longValue numbetWithUnsignedLong: inifWithUnsignedLong: unsignedLongValue numberWithLonglong: initWithLongLong: longlongValue numberWithllnsignedLongLong: initWithUnsignedLongLong: unsigned LongLongValue numberWithFloat: initWithFloat: floatValue numberWithDouble: initWthDouble: doubleValue numberWthBool: initWithBool: boolValue

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

Академия Магических Талантов

Шерстобитова Ольга Сергеевна
Фантастика:
фэнтези
8.53
рейтинг книги
Академия Магических Талантов

Академия

Щепетнов Евгений Владимирович
3. Петр Синельников
Фантастика:
фэнтези
6.20
рейтинг книги
Академия

Изгнанники

Коу Дэвид
2. Хроники Лон-Тобина
Фантастика:
фэнтези
5.00
рейтинг книги
Изгнанники

Иоанна Хмелевская (Избранное)

Хмелевская Иоанна
Детективы:
исторические детективы
5.00
рейтинг книги
Иоанна Хмелевская (Избранное)

Новые религиозные организации России деструктивного и оккультного характера

Автор неизвестен
Религия и эзотерика:
религия
5.00
рейтинг книги
Новые религиозные организации России деструктивного и оккультного характера

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.56
рейтинг книги
Сборник коротких эротических рассказов

Точка Бифуркации XI

Смит Дейлор
11. ТБ
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Точка Бифуркации XI

Меняя маски

Метельский Николай Александрович
1. Унесенный ветром
Фантастика:
боевая фантастика
попаданцы
9.22
рейтинг книги
Меняя маски

Фальшивый Итачи

Observet
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Фальшивый Итачи

Сценарий сериала. Как написать историю, достойную Нетфликса

Ландау Нил
Сценарная мастерская. Секреты идеального текста
Документальная литература:
зарубежная публицистика
5.00
рейтинг книги
Сценарий сериала. Как написать историю, достойную Нетфликса

Проект «Оборотень». Пенталогия

Земляной Андрей Борисович
Фантастика:
боевая фантастика
8.31
рейтинг книги
Проект «Оборотень». Пенталогия

Собрание сочинений. Том 8

Дойл Артур Конан
Проза:
классическая проза
6.25
рейтинг книги
Собрание сочинений. Том 8

Если жизнь бьёт тебя по голове, значит это кому нибудь нужно

Дикий Электрик
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Если жизнь бьёт тебя по голове, значит это кому нибудь нужно

Сицилианская защита

Васильев Андрей Александрович
5. Акула пера в Мире Файролла
Фантастика:
фэнтези
киберпанк
рпг
9.27
рейтинг книги
Сицилианская защита