在iPhone上使用objective-c,这段代码出了什么问题? 是在泄漏记忆吗?为什么? 我该如何正确地做到这一点?
NSMutableString *result = [NSMutableString stringWithFormat:@"the value is %d", i];
...然后在我的代码中...我可能需要将其更改为:
result = [NSMutableString stringWithFormat:@"the value is now %d", i];
我需要第二次使用stringWithFormat ...但这不是创建一个新字符串并且没有正确释放旧字符串吗?
答案 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获得的字符串:所以你不需要(确实不能)释放它。