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

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

Жанры

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

Вернемся к программе 15.I. Методы класса служат для создания объектов NSNumber типа long, char, float и double. Рассмотрим, что происходит после созда-ния объекта типа double с помощью строки myNumber = [NSNumber numberWithDouble: 12345е+15];

и последующей (неверной) попытки считывания и вывода его значения с помощью строки NSLog (@"%i", [myNumber integerValue]};

Выводится результат О

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

В операторе if в выражении с сообщением [intNumber isEqualToNumber: floatNumber]

метод isEqualToNumber: выполняет числовое сравнение двух объектов NSNumber по возвращаемому булевому значению.

Метод compare: позволяет сравнивать числовые значения. Выражение с со-общением [intNumber compare: myNumber]

возвращает значение NSOrderedAscending, если числовое значение, хранящееся в intNumber, меньше числового значения, содержащегося в myNumber; возвращает значение NSOrderedSame, если эти два числа равны; возвращает значение NSOrderedDescending, если первое число больше второго. Эти возвращаемые значении определены в заголовочном файле NSObjecth.

Отметим, что вы не можете реинициализировать значение созданного ранее объекта NSNumber. Например, с помощью приведенного ниже оператора нельзя задать значение целого элемента, сохраненного в объекте NSNumber myNumber. [myNumber initWithlnt: 1000];

При выполнении программы этот оператор даст ошибку. Все числовые объекты должны создаваться заново, а это означает, что нужно вызывать либо один из методов первого столбца таблицы 15.1 класса NSNumber, либо один из методов столбца 2 с результатом метода alloc. myNumber = [[NSNumber alloc] initWithlnt: 1000];

Конечно, при таком способе создания объекта myNumber вы сами должны высвобождать занимаемую им память с помощью оператора [myNumber release];

Мы будем использовать объекты класса NSNumber в остальных программах этой главы. 15.2. Строковые объекты

Мы уже работали со строковыми объектами в предыдущих главах. Заключая последовательность символов в кавычки, как в @"Programming is fun" (Программировать интересно),

мы создаем в Objective-C объект символьной строки. Для работы с объектами символьных строк Foundation framework поддерживает класс с именем NSString. С-строки состоят из символов типа char, а объекты класса NSString состоят из символов типа unichar. Unichar-символ - это многобайтный символ, соответству-ющий стандарту Unicode. Это позволяет работать с наборами символов, содер-жащими буквально миллионы символов. Вам не нужно заботиться о внутреннем представлении этих символов в строках, поскольку класс NSString автоматически делает это для вас. С помощью методов из этого класса легко разрабатывать приложения, доступные для локализации, то есть для работы на различных языках по всему миру.

Как вы уже знаете, для создания в Objective-C объекта константной сим-вольной строки нужно поместить символ @ перед строкой символов, заключенной в кавычки. Например, с помощью выражения @"Программировать интересно"

создается объект константной символьной строки. Это константная символьная строка, принадлежащая классу NSConstantString. NSConstantString - это подкласс класса строковых объектов NSString. Чтобы использовать строковые объекты в программах, нужно включать в них строку #import <Foundation/NSString.h> Дополнительно о функции NSLog

В программе 15.2 показано, как определить объект класса NSString и присвоить ему начальное значение и как использовать символы формата %@ для вывода объекта NSString. #import <Foundation/NSObject.h> #import <Foundation/NSString.h> #import <Foundation/NSAutoreleasePool.h> int main (int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSString *str = @"Программировать интересно"; NSLog (@"%@", str); [pool drain]; return 0; }

Вывод программы 15.2 Программировать интересно

В операторе NSString *str = @"Программировать интересно";

Объект константной строки "Программировать интересно"" присваивается переменной str класса NSString. Затем ее значение выводится с помощью NSLog.

Символы формата %@ в NSLog позволяют выводить значения любых объек-тов. Например, если задано NSNumber *intNumber = [NSNumber numberWithlnteger: 100];

то в результате вызова NSLog NSLog(@"%@", intNumber);

выводится 100

Мы можем даже применять символы формата %@ для вывода всего содер-жимого массивов, словарей и наборов. С их помощью можно также выводить объекты ваших собственных классов, если вы замещаете метод rtescription, на-следуемый вашим классом. Если нет замещения этого метода, то NSLog просто выводит имя класса и адрес объекта в памяти (что я кляется реализацией по умолчан ию метода description, наследуемого из класса NSObject). Мутабельные (mutable) и немутабельные (immutable) объекты

С помощью выражения @"Программировать интересно"

мы создаем объект, содержимое которог о нельзя изменить. Такой объект назы-вается немутабельным (immutable). Класс NSString используется для немутабель- ных строк, но нередко при работе со строками требуется изменять символы внутри строки, например, удалить или заменить некоторые символы. Для работы со строками этого типа предназначен класс NSMutabieString.

В программе 15.3 показаны основные способы работы с немугабельными символьными строками. // Основные операции со строками #import <Foundation/NSObject.h> #import <Foundation/NSString.h> #import < Foundation/N SAuto releasePool.h> int main (int argc, char *argv(]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSString *str1 = @"This is string A"; NSString *str2 = @'This is string B"; NSString *res; NSComparisonResult compareResult; // Подсчет числа символов NSLog (@"Length of str 1: %lu", [strl length]); // Копирование одной строки в другую res = [NSString stringWithString: strl]; NSLog (@"copy: %@", res); // Копирование одной строки в конец другой str2 = [strl stringByAppendingString: str2]; NSLog (@"Concatentation: %@", str2); // Проверка на равенство двух строк if ([strl isEqualToString: res] == YES) NSLog (@"str1 == res"); else NSLog (@"str1 != res"); // Сравнение одной строки с другой (<, == или >) compareResult = [strl compare: str2]; if (compareResult == NSOrderedAscending) NSLog (@"str1 < str2"); else if (compareResult == NSOrderedSame) NSLog (@"str1 == str2"); else // NSOrderedDescending NSLog (@"str1 > str2"); // Преобразование символов строки в верхний регистр (в прописные буквы) res = [strl uppercaseString]; NSLog (@"Uppercase conversion: %s", [res UTF8String]); // Преобразование символов строки в нижний регистр (в строчные буквы) res = [strl lowercaseString]; NSLog (@"Lowercase conversion: %@", res); NSLog (@"Original string: %@", strl); [pool drain]; return 0; }

Вывод программы 15.3 Length of strl: 16 (Длина strl) Copy: This is string А (Копирование: это строка A) Concatentation: This is string AThis is string В (Конкатенация: это строка Аэто строка В)) strl == res strl < str2 Uppercase conversion: THIS IS STRING А (Преобразование в верхний регистр: ЭТО СТРОКА А) Lowercase conversion: this is string а (Преобразование в нижний регистр: это строка а} Original string: This is string А (Исходная строка: это строка А)

В программе 15.3 сначала объявляются три немутабельных объекта класса NSString: strl, str2 и res. Первые два инициализируются как объекты константных символьных строк. В объявлении NSComparisonResult compareResult;

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

Метод length можно использовать для подсчета числа символов строки. Он возвращает целое значение без знака типа NSUInteger. Вывод подтверждает, что строка @"Thi$ is string А" действительно содержит 16 символов. Оператор res = [NSString stringWithString: strl];

показывает, как создать новую символьную строку с содержимым другой строки. Результирующий объект класса NSString присваивается объекту res и затем выводится для подтверждения результатов. Здесь создается фактическая копия содержимого строки, а не только другая ссылка на ту же строку в памяти. Это означает, что strl и res ссылаются на два различных строковых объекта, что от-личается от простого присваивания res = strl;

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

Законы Рода. Том 13

Андрей Мельник
13. Граф Берестьев
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 13

Бастард Императора. Том 4

Орлов Андрей Юрьевич
4. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Бастард Императора. Том 4

Шведский стол

Ланцов Михаил Алексеевич
3. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Шведский стол

Двойник короля 17

Скабер Артемий
17. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 17

Чужак из ниоткуда 2

Евтушенко Алексей Анатольевич
2. Чужак из ниоткуда
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чужак из ниоткуда 2

На границе империй. Том 9. Часть 5

INDIGO
18. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 5

Геном хищника. Книга третья

Гарцевич Евгений Александрович
3. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга третья

Как я строил магическую империю 2

Зубов Константин
2. Как я строил магическую империю
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю 2

Эволюционер из трущоб. Том 3

Панарин Антон
3. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
6.00
рейтинг книги
Эволюционер из трущоб. Том 3

Ефрейтор. Назад в СССР. Книга 2

Гаусс Максим
2. Второй шанс
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Ефрейтор. Назад в СССР. Книга 2

Тихие ночи

Владимиров Денис
2. Глэрд
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Тихие ночи

Эволюционер из трущоб. Том 5

Панарин Антон
5. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 5

Орден Багровой бури. Книга 1

Ермоленков Алексей
1. Орден Багровой бури
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Орден Багровой бури. Книга 1

Позывной "Князь" 3

Котляров Лев
3. Князь Эгерман
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Позывной Князь 3