Это определенно может привести к утечке памяти. Вы должны быть осторожны с повторным использованием, так как вам нужно много знать о фактической реализации базового объекта NSString, чтобы решить, «безопасны» ли вы или нет. Поэтому, если вы не используете сборщик мусора, для безопасности не следует повторно использовать переменные так, как вы.
Например, это абсолютно безопасно:
NSString *result = @"example";
result = [result stringByAppendingString:@" test"];
потому что исходная строка на самом деле была строковой константой target-c. Это, однако, приведет к утечке памяти:
NSString *result = [[NSString alloc] initWithUTF8String:argv[0]];
result = [result stringByAppendingString:@" something more"];
Это, однако, было бы безопасно, поскольку вы никогда не владели результатом:
NSString *result = [NSString stringWithUTF8String:argv[0]];
result = [result stringByAppendingString:@" something more"];
Так что, в принципе, если вы не являетесь владельцем объекта или у вас включена сборка мусора, это безопасно. Однако, если вы владеете исходным объектом и делаете это, у вас будет утечка памяти.