Шрифт:
Класс NSString — это класс Foundation, который используется для работы со строками. (Его описание см. в следующей главе.) Предположим, что вы редак-тируете программу, в которой используется этот класс, и вам нужно получить информацию о нем и его методах. Нужно выделить слово NSString в любом месте окна редактирования и щелкнуть на нем правой кнопкой. Если выбрать в по-явившемся меню пункт Find Selected Text in API Reference, появится окно до-кумента (рис. I4.2).
Рис. 14.2. Получение документации по классу NSString
Выполняя прокрутку панели под заголовком NSString Class Reference (Справка но классу NSString), вы увидите (среди прочей информации) список всех методов, которые поддерживаются этим классом. Это позволяет легко находить информацию о методах, реализуемых определенным классом, включая описание их работы и аргументов, которые они принимают.
К этой документации можно также выполнять доступ по адресу deveIoper.apple.com/referencelibrary с переходом к справочной документации Foundation (по ссылкам Cocoa, Frameworks, Foundation Framework Reference). На этом веб-сайте можно найти разнообразные документы по определенным вопросам программирования, таким как управление памятью, строки и управление файлами.
Если вы не подписаны на определенный набор документов вместе с 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, когда прекращаете их использование.