目标C:我是否需要在此示例中释放NSString?

时间:2010-03-08 14:58:25

标签: objective-c memory-management

debugTestLabel.text = [[NSString alloc] initWithFormat:@"%g, %g", @"Testing String", @"I am another"];

我分配字符串并立即分配给文本,但我不知道该字符串是否可以自动释放。

7 个答案:

答案 0 :(得分:4)

不,它不会自动释放,你必须释放它。但是,如果您使用[NSString stringWithFormat],它将自动释放。

答案 1 :(得分:1)

jupp,将autorelease添加到结尾

答案 2 :(得分:1)

是的,alloc == release(一个容易记住的规则)

答案 3 :(得分:1)

如果您阅读documentation,您会发现text属性已被复制 - 您无需保留NSString个实例。

所以答案是肯定的:你可以(自动)发布NSString实例。

答案 4 :(得分:0)

实际上,这取决于。

[[NSString alloc] initWithFormat:...];

这将构造一个保留计数为+1的字符串。如果text属性为@property(retain)@property(copy),则debugTestLabel将采用其所有权,因此您应该-release(或-autorelease)然后。

但是,如果text属性为@property(assign),则debugTestLabel不会声明所有权,您必须确保文本的有效期超过标签使用的时间。< / p>

(如果标签是UILabel子类,那么它就是第一种情况。)

答案 5 :(得分:0)

规则是,如果方法以init开头,则必须release(或autorelease它。否则它是一个自动释放的对象(例如stringWithFormat:)。因此,在这种情况下,您应该将代码更改为:

debugTestLabel.text = [[[NSString alloc] initWithFormat:@"%g, %g", @"Testing String", @"I am another"] autorelease];

或更多标准,

debugTestLabel.text = [NSString stringWithFormat:@"%g, %g", @"Testing String", @"I am another"];

答案 6 :(得分:0)

您应该在使用字符串后立即释放字符串。