ПРОГРАММИРОВАНИЕ ПОД IPHONE, IPAD OBJECTIVE-C Часть 1

NSMutableString (изменяемые строки)

В предыдущей статье я рассказывал вам о классе NSString. Как я уже говорил — он используется для хранения строк. Но у него есть один маленький недостаток. Мы не можем изменять строку, которую храним в экземпляре этого класса. В этой ситуации на помощь нам приходит класс NSMutableString, который отлично справляется с этой задачей.

Давайте посмотрим как он это делает. Создайте новый проект на основе представления (View-based Application) и назовите егоMutableStrings. Теперь откройте файл MutableStringsViewController.m, раскомментируйте в нем метод viewDidLoad. Затем добавьте в него несколько строк:

<code data-result="[object Object]">NSMutableString *s1 = [NSMutableString stringWithCapacity:10];
NSMutableString *s2 = [[NSMutableString alloc] initWithCapacity:10];
[s2 release];</code>

В обеих случаях мы создаем новую строку (изменяемую), разница лишь в том, что во втором случае мы сами контролируем процесс выделения и очистки памяти. В параметрах этих методов указано число 10. Это означает, что в нашей строке будет 10 символов. Но что произойдет, если в процессе изменения кода мы забудем об этом параметре и прибавим к этой строке еще 10 символов? Ничего не будет, код программы будет выполняться так же. Этот параметр является как бы подсказкой для компилятора, на основании него компилятор резервирует определенный объем памяти. Точнее говоря — этот параметр носит характер оптимизации, а значение этого параметра никак не ограничивает длинну строки.

Давайте попробуем изменить нашу строку:

<code data-result="[object Object]">[s1 appendString:@"First string "];
NSLog(@"%@", s1);

[s1 appendFormat:@"%@ Objective-C", @"Hello"];
NSLog(@"%@", s1);</code>

В первом случае мы добавляем к нашей строке значение @»First string «. Второй случай очень похож на метод stringWithFormat с предыдущей статьи, он работает по тому же принципу + добавляет к нашей строке результат работы. Как вы увидели, чтобы раньше добиться такого результата — нам приходилось создавать новую строку. Теперь — мы просто изменяем существующую.

Следующий пример демонстрирует возможность удаления части строки:

<code data-result="[object Object]">[s1 deleteCharactersInRange:NSMakeRange(0, 13)];
NSLog(@"%@", s1);</code>

О классе NSRange я расскажу позже, пока что вам следует понять, что метод NSMakeRange имеет два параметра. В первом параметре мы указываем с какого знака по счету начать удаление, в втором — количество знаков, которые хотим удалить. Нумерация знаков начинается с нуля. В результате выполнения этого примера мы получим строку «Hello Objective-C».

Следующий пример демонстрирует вставку строки в строку:

<code data-result="[object Object]">[s1 insertString:@" alive!" atIndex:s1.length];
NSLog(@"%@", s1);</code>

Здесь мы вставляем строку @» alive!» в конец нашей строки. Что что эта строка вставляется именно в конец — мы указываем во втором параметре. Если мы в качестве второго параметра укажем 0 — наша подстрока вставится в начало исходной строки. Результатом выполнения этого кода будет строка «Hello Objective-C alive!».

В этом примере мы заменяем указанную часть строки другой строкой:

<code data-result="[object Object]">[s1 replaceCharactersInRange:NSMakeRange(18, 5) withString:@"World"];
NSLog(@"%@", s1);</code>

Грубо говоря, в этом методе мы указываем с какого знака и по какой удалить строку, а на место удаленной — подставляется строка со второго параметра. Результатом выполнения этого кода будет строка «Hello Objective-C World!». Как видите, мы просто заменили подстроку alive. Но сделать это можно было и другим способом:

<code data-result="[object Object]">[s1 replaceOccurrencesOfString:@"World" withString:@"alive" 
options:NSCaseInsensitiveSearch range:NSMakeRange(0, s1.length)];
NSLog(@"%@", s1);</code>

Этот код приводит нашу строку к значению «Hello Objective-C alive!», но самое интересно — как он это делает? Для того, чтобы методк работал — нам нужно передать ему четыре параметра:

  • значение подстроки поиска (эту подстроку метод будет искать в нашей исходной строке);
  • занчение на которое будет заменена наша подстрока в случаи ее нахождения;
  • способ сравнения (о возможных способах сравнения вы можете посмотреть в документации);
  • область поиска (конкретно в этом случае я указал всю строку).

Евли все указано верно — вы получите знакомый результат «Hello Objective-C alive!».

Последний метод, о котором хотелось бы рассказать, это метод установки строки:

<code data-result="[object Object]">[s1 setString:@"This is a new string"];
NSLog(@"%@", s1);</code>

Этот метод заменяет все символы вашей исходной строки той строкой, которую вы указали в параметре этого метода. Соответственно, в результате мы получим: «This is a new string».

Это самые часто употребляемые методы. Если их не достаточно — пишите в комментарии и я буду дополнять статью.

Исходный код можно скачать здесь.

Comments are closed.