0

在iPhone上使用objective-c,这段代码有什么问题?是不是内存泄露了?为什么?我将如何正确地做到这一点?

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

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

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

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

4

4 回答 4

5

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

于 2010-06-21T14:36:41.557 回答
2

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

[ result setString:[NSString stringWithFormat:@"the value is now %d", i] ];
于 2010-06-21T14:38:30.753 回答
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];

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

于 2010-06-21T14:41:41.967 回答
-1

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

如果您没有其他对它的引用,并且您只是为了提高性能/内存占用而重用字符串,这听起来像是过早的优化。

顺便说一句,您不拥有通过 stringWithFormat: 获得的字符串,因此您不需要(确实不能)释放它。

于 2010-06-21T15:48:22.773 回答