Программирование на 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, то есть перед восьмым символом строки. В отличие
С помощью метода 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, 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.