Подтвердить что ты не робот

В чем разница между NSString и NSMutableString?

Мне нужно уточнить разницу между NSString и NSMutableString. Может ли кто-нибудь развернуть кратко?

4b9b3361

Ответ 1

Предположим, у вас есть такой код

NSString *s = [[NSString alloc] initWithString:@"Hello"];

s = [s stringByAppendingString:@"World"];

и другой код, подобный этому

NSMutableString *ms = [[NSMutableString alloc] initWithString:@"Hello"];

[ms appendString:@"World"];

Оба эти, функционально, делают то же самое, за исключением одной разницы - утечки верхнего кода кода. - [NSString stringByAppendingString:] генерирует новый неизменяемый объект NSString, который затем вы указываете указателю s. Тем не менее, в этом процессе вы сироте объекта NSString, на который первоначально указывалось. Замена линии следующим образом избавит вас от утечки:

s = [[s autorelease] stringByAppendingString:@"World"];

Ответ 2

Разница между NSMutableString и NSString заключается в том, что

NSMutableString: Объекты NSMutableString предоставляют методы для изменения базового массива символов, которые они представляют, а NSString - нет. Например, NSMutableString предоставляет такие методы, как appendString, deleteCharactersInRange, insertString, replaceOccurencesWithString и т.д. Все эти методы работают со строкой, как она существует в памяти.

NSString:, с другой стороны, это только строка "create-once-then-read-only", если вы это сделаете; вы обнаружите, что все его методы "манипуляции" (подстрока, uppercaseString и т.д.) возвращают другие объекты NSString и никогда не изменяют существующую строку в памяти.

Ответ 3

Экземпляр NSString не может быть изменен после его инициализации - он является "неизменным". Нет методов NSString могут изменять строковое значение.

NSMutableString, с другой стороны, может быть изменена после ее инициализации.

Ответ 4

Как раз для того, чтобы расширить ответ на вопрос Энди Уайта, в вашем коде могут появиться преимущества производительности NSString вместо NSMutableString (как всегда, тестирование с использованием инструментов производительности Apple, чтобы убедиться, что это действительно то место, где вы столкнулись с вашими трудностями). В ситуации, когда вы хотите изменить значение NSString, одним из вариантов является создание совершенно новой NSString с измененным значением в ней, а затем уничтожение старой NSString.