Я читал, что если вы используете stringByAppendingString в NSString, вы в конечном итоге получите утечки, потому что указатель, связанный с начальным NSString, перемещается, указывая на новую строку, созданную добавлением, тогда как в NSMutableString ваш указатель всегдауказывает на эту изменчивую строку.
Это звучит как совет кого-то, кто не совсем понимал, что происходит с управлением памятью.Конечно, [NSString stringByAppendingString]
возвращает новую строку.Но что вы делаете с этой новой строкой, зависит от вас.Конечно, вы могли бы вызвать утечку памяти, ненадлежащим образом переназначив результат сохраненному свойству, например:
myStringProperty = [myStringProperty stringByAppendingString:@" more bits"];
Правильная форма будет использовать self, например:
self.myStringProperty = [myStringProperty stringByAppendingString:@" more bits"];
Следуйте рекомендациям по памяти какао.
Что касается словарей и других типов коллекций: относитесь к тому, что выходит из словаря, надлежащим образом, с учетом типа, который вам известен.Если вы вытащите объект, который на самом деле является строкой NSString, но попытаетесь использовать его в качестве NSMutableString, ваше приложение упадет (с «селектором не найден» или подобным).Поэтому в этом случае вам необходимо создать новую NSMutableString из NSString.
Интересное примечание: Apple решила сделать NSMutableString подклассом NSString.Что-то в этом мне кажется неразумным - если что-то выглядит неизменным, потому что оно имеет тип NSString, я хочу, чтобы оно было неизменным!(Но на самом деле это может быть NSMutableString.) Сравните это с Java, у которого есть класс String и совершенно отдельный класс BufferedString.