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

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

Жанры

Программирование на 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

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

Диверсант

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

Вернувшийся: Корпорация. Том III

Vector
3. Вернувшийся
Фантастика:
космическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Вернувшийся: Корпорация. Том III

Газлайтер. Том 6

Володин Григорий
6. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 6

Имя нам Легион. Том 12

Дорничев Дмитрий
12. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 12

Черный дембель. Часть 2

Федин Андрей Анатольевич
2. Черный дембель
Фантастика:
попаданцы
альтернативная история
4.25
рейтинг книги
Черный дембель. Часть 2

Ратник

Ланцов Михаил Алексеевич
3. Помещик
Фантастика:
альтернативная история
7.11
рейтинг книги
Ратник

Виконт. Книга 3. Знамена Легиона

Юллем Евгений
3. Псевдоним `Испанец`
Фантастика:
фэнтези
попаданцы
аниме
7.00
рейтинг книги
Виконт. Книга 3. Знамена Легиона

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

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

Император Пограничья 5

Астахов Евгений Евгеньевич
5. Император Пограничья
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Император Пограничья 5

Возвращение

Кораблев Родион
5. Другая сторона
Фантастика:
боевая фантастика
6.23
рейтинг книги
Возвращение

Неудержимый. Книга XXXII

Боярский Андрей
32. Неудержимый
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Неудержимый. Книга XXXII

Барон меняет правила

Ренгач Евгений
2. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон меняет правила

Вернувшийся: Новая жизнь. Том I

Vector
1. Вернувшийся
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Вернувшийся: Новая жизнь. Том I

Граф

Ланцов Михаил Алексеевич
6. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Граф