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

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

Жанры

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

Объявление NSMutableString *mstr;

определяет mstr как переменную со строковым объектом, содержимое которого может изменяться во время выполнения программы. В операторе mstr = [NSMutableString stringWithString: strl];

переменной mstr присваивается строковый объект, содержимое которого является копией символов, содержащихся в strl, то есть 'This is string А". Если метод stringWithString: передается классу NSMutableString, возвращаемым результатом является мутабельный строковый объект. Если он передается классу NSString, как в программе 15.5, то мы получаем немутабельный строковый объект.

Метод insertString:atlndex: выполняет вставку указанной символьной строки в строку-получатель, начиная с указанного индекса (порядкового номера). В данном случае выполняется вставка mutable" в строку, начиная с индекса 7, то есть перед восьмым символом строки. В отличие

от методов для немутабель- ных строковых объектов, никакого значения не возвращается, поскольку модифицируется строка-получатель. При втором вызове insertstring:atlndex: используется метод length для вставки одной символьной строки в конец другой. Метод appendString: позволяет выполнить эту задачу несколько проще.

С помощью метода deleteCharactersInRange: можно удалить заданное число символов из строки. Применение диапазона (16, 13) к строке This is mutable string A and string В and string C

позволяет удалить 13 символов "string A and", начиная с индекса 16 (то есть с 17-го символа строки). Это показано на рис. 15.1.

Рис. 15.1. Индексы позиций в строке

В следующих строках программы 15.5 метод rangeOfString: позволяет сначала найти строку, а затем удалить ее. После проверки, что строка @"string В and" действительно содержит mstr, применяется метод deleteCharactersInRange: для удаления этих символов с использованием диапазона, возвращаемого методом rangeOfString:, в качестве аргумента.

Метод setString: применяется для непосредственного задания содержимого мутабельного строкового объекта. После присвоения строки <§>'This is string А" несколько символов этой строки заменяются другой строкой с помощью метода replaceCharacterstnRange:. Размеры заменяемой и заменяющей строк могут быть неодинаковыми; одну строку можно заменить строкой равного или неравного размера. Например, в операторе [mstr replaceCharacterstnRange: NSMakeRange(8, 8) withString: @"a mutable string"];

8 символов "string А" заменяются на 16 символов "a mutable string".

В остальной части этой программы показано, как выполнять операции поиска и замены. В первом случае внутри строки mstr ищется строка @"This is" (сначала mstr была присвоена строка @This is a mutable string"). Эта строка находится в строке поиска и заменяется строкой @"An example of". В результате содержимое mstr заменяется строкой @"An example of a mutable string".

Далее в программе выполняется цикл, показывающий, как выполнить опе-рацию «найти и заменить все». Строке поиска присваивается значение @"а", и строке замены присваивается значение @Т*,

Если строка замены содержит также строку поиска (например, нужно заменить строку "а" на строку "аХ"), то мы получим бесконечный цикл.

Во-вторых, в случае пустой строки замены (когда она не содержит никаких символов) мы фактически удаляем все экземпляры строки поиска. Пустая кон-стантная символьная строка задается парой смежных кавычек без пробелов: replace = @"";

Конечно, если мы хотим просто удалить экземпляр сгроки, то можно ис-пользовать метод deleteCharactersInRange:.

И, наконец, класс NSMutahleString содержит метод с именем replaceOccurrencesOfString:withString:options:range: для операции «найти и заменить все» в строке. Цикл while программы 15.5 можно было бы заменить одним оператором. [mstr replaceOccurrencesOfString: search withString: replace options: nil range: NSMakeRange (0, [mstr length])];

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

В программах 15.4 и 15.5 выполняется работа со многими строковыми объектами, которые создаются и возвращаются разными методами классов NSString и NSMutableString. Вам не нужно думать об освобождении памяти, занимаемой эти-ми объектами; это предусмотрено в методах-создателях объектов. Предполага-ется, что создатели добавили все эти объекты в автоматически высвобождаемый пул (autorelease-пул), и объекты будут высвобождены, когда будет высвобожден сам пул. Однако если вы разрабатываете программу, которая создает много временных объектов, то память, используемая ими, может накапливаться. В таких случаях, возможно, придется освобождать память во время выполнения программы. Это описывается в главе 17, На данный момент просто учтите, что объекты занимают намять, которая может увеличиваться по мере выполнения программы.

Класс NSString содержит более 100 методов, которые могут работать с нему-

табельными строковыми объектами. В таблице 15.2 приводятся наиболее рас-пространенные методы, а в таблице 15.3 — некоторые дополнительные методы из класса NSMutableString. Другие важные методы класса NSString (например, ра-ботающие с именами путей и читающие содержимое файла в строку) будут вво-диться далее.

В таблицах 15.2 и 15.3, url — это объект NSURL, path — это объект NSString, указывающий путь к файлу, nsstring — это объект NSString, / — это значение типа NSUInteger, представляющее допустимый номер символа в строке, епс — это объект NSStringEncoding, указывающий кодировку символов, err — это объект NSError, который описывает ошибку, если она возникла, size (размер) и орй(опции) имеют тип NSUInteger, и range — это объект NSRangc, указывающий допустимый диапазон символов в списке.

Табл. 15.2. Наиболее распространенные методы класса NSString Метод Описание +(id) stringWithContentsOfFile: path encoding; enc error: err Создает новую строку и присваивает ей содержимое файла, указанного аргументом path, в кодировке символов enc; возвращает ошибку в err, если не nil. +(id) stringWithContentsOfURL: url encoding: enc error: err Создает новую строку и присваивает ей содержимое url в кодировке символов enc, возвращает ошибку в err, если не nil. +(id) string Создает новую пустую строку +(id) stringWithString: nsstring Создает новую строку и присваивает ей nsstring. -(id) initWithString: nsstring Присваивает вновь выделяемой строке nsstring. -(id) initWithContentsOfFile: path encoding: enc error: err Присваивает строке содержимое файла, указанного аргументом path. -(id) initWithContentsOfURL: w/encoding enc error: ей Присваивает строке содержимое u//(NSURL *) в кодировке символов enc; возвращает ошибку в err, если не nil. -(NSUInteger) length Возвращает число символов в строке. -(unichar) characterAtlndex: i Возвращает символ Unicode, находящийся в позиции с индексом i -(NSString *) substringFromlndex: i Возвращает подстроку от символа с индексом i до конца. -(NSString *) siibstringWithRange: range Возвращает подстроку в соответствии с указанным диапазоном. -(NSString *) substringToIndex: i Возвращает подстроку от начала строки вплоть до символа с индексом i. -(NSComparator *) caselnsensitiveCompare: nsstring Сравнение двух строк независимо от регистра букв. -(NSComparator *) compare: nsstring Сравнение двух строк. -(BOOL) hasRrefix: nsstring Проверка, что строка начинается с nsstring. -(BOOL) hasSuffix: nsstring Проверка, что строка заканчивается nsstring. -(BOOL) isEqualToString: nsstring Проверка, что две строки равны. -(NSString *) capitalizedString Возвращает строку, делая прописной первую букву каждого слова (и строчными все остальные буквы каждого слова). -(NSString *) lowercaseString Возвращает строку, преобразованную в нижний регистр. -(NSString *) uppercaseString Возвращает строку, преобразованную в верхний регистр. -(const char *) UTF8String Возвращает строку, преобразованную в С-строку в кодировке UTF-8. -(double) doubleValue Возвращает строку, преобразованную в значение типа double. -(tloat) floatValue Возвращает строку, преобразованную в значение с плавающей точкой. -(NSInteger) integerValue Возвращает строку, преобразованную в целое значение NSInteger. -(int) intValue Возвращает строку, преобразованную в целое значение.

Методы, которые приводятся в таблице 15.3, создают или модифицируют объекты класса NSMutableString.

Табл. 15.3. Наиболее распространенные методы класса NSMutableString Метод Описание +(id) stringWithCapacity: size Создает строку, содержащую первоначально size символов. -(id) initWithCapacity: size Инициализирует строку с начальной длиной size символов. -(void) setstring: nsstring Присваивает строке nsstring. -(void) appendString: nsstring Добавляет nsstring в конец строки-получателя. -(void) deleteCharactersInFtange: range Удаляет символы в указанном диапазоне. -(void) insertstring; nstring atlndex: i Выполняет вставку nsstring в строку-получатель, начиная с индекса i. -(void) replaceCharactersInRange: range withString: nsstring Выполняет замену символов в указанном диапазоне на nsstring. -(void) replaceOccurrencesOfString: nsstring withString: nsstring2 options: opts range: range Выполняет замену всех экземпляров nsstring на nsstring2 в указанном диапазоне и в соответствии с опциями opts. Опции могут представлять побитовую OR-комбинацию NSBackwardsSearch (поиск начинается с конца диапазона), NSAnchoredSearch (совпадение nsstring должно быть только с начала диапазона), NSUteraiSearch (выполняется побайтовое сравнение) и NSCaselnsensitiveSearch.

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

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

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

Личный аптекарь императора

Карелин Сергей Витальевич
1. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Личный аптекарь императора

Тринадцатый XII

NikL
12. Видящий смерть
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
7.00
рейтинг книги
Тринадцатый XII

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

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

Последний Паладин. Том 9

Саваровский Роман
9. Путь Паладина
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Последний Паладин. Том 9

Эфемер

Прокофьев Роман Юрьевич
7. Стеллар
Фантастика:
боевая фантастика
рпг
7.23
рейтинг книги
Эфемер

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

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

Я Гордый Часть 3

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

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель

Дважды одаренный. Том III

Тарс Элиан
3. Дважды одаренный
Фантастика:
альтернативная история
аниме
фэнтези
фантастика: прочее
юмористическое фэнтези
5.00
рейтинг книги
Дважды одаренный. Том III

Антимаг

Гедеон Александр и Евгения
1. Антимаг
Фантастика:
фэнтези
6.95
рейтинг книги
Антимаг

Вечный. Книга I

Рокотов Алексей
1. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга I

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

Винокуров Юрий
32. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXXII