在iPhone上正确重用NSMutableString

时间:2010-06-21 14:04:38

标签: iphone objective-c memory-management nsmutablestring stringwithformat

在iPhone上使用objective-c,这段代码出了什么问题? 是在泄漏记忆吗?为什么? 我该如何正确地做到这一点?

NSMutableString *result = [NSMutableString stringWithFormat:@"the value is %d", i];

...然后在我的代码中...我可能需要将其更改为:

result = [NSMutableString stringWithFormat:@"the value is now %d", i];

我需要第二次使用stringWithFormat ...但这不是创建一个新字符串并且没有正确释放旧字符串吗?

4 个答案:

答案 0 :(得分:5)

不,它不会泄漏内存,因为stringWithFormat:会返回一个自动释放的对象。

答案 1 :(得分:2)

您可以对已有的NSMutableString使用实例方法“setString”,如下所示:

[ result setString:[NSString stringWithFormat:@"the value is now %d", i] ];

答案 2 :(得分:0)

如果您真的想重复使用该字符串,可以使用类似

的内容
[result setString:@""];
[result appendFormat:@"the value is now %d", i];

但是,除非您注意到性能/内存问题,否则请使用

NSString *result = [NSString stringWithFormat:@"the value is %d", i];

/* ... */

result = [NSString stringWithFormat:@"the value is now %d", i];

使用不可变对象通常更容易,因为它们无法在你的脚下改变。

答案 3 :(得分:-1)

在我看来,使用新内容替换可变字符串的自然方法是,除非您在其他地方有其他对相同可变字符串的引用。

如果没有对其进行其他引用,并且您仅重用字符串来改善性能/内存占用,那听起来就像是过早优化。

顺便说一下,你没有拥有你通过stringWithFormat获得的字符串:所以你不需要(确实不能)释放它。