Мне нужно уточнить разницу между NSString и NSMutableString. Может ли кто-нибудь развернуть кратко?
В чем разница между NSString и NSMutableString?
Ответ 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.