对于以下代码,1 - 在从getFoo返回的对象上需要保留; 2 - foo方法func中需要释放吗?
- (NSString *)getFoo {
return [[[NSString alloc] initWithString:@"foo"] autorelease];
}
- (void)func {
// ??? is the retain needed?
NSString *foo = [[self getFoo] retain];
// use foo
// ??? is the release needed?
[foo release];
}
答案 0 :(得分:2)
如果您alloc
,copy
或retain
对象需要release
它。
在您的示例中,您不需要保留它。但是既然你做了,你确实需要发布它。
答案 1 :(得分:2)
每个retain
必须与release
匹配。
这就是说,如果你没有推迟它的使用,你的func你不需要retain
* foo。
通常自动释放池在运行循环结束时获取drain
,因此您有时间在函数中本地使用它。
但是,如果您retain
,则必须release
。
你可以这样做:
return [NSString stringWithString:@"foo];
这是一个向您返回autorelease
对象的便捷方法。
答案 2 :(得分:1)
您编写的代码很好。 当你分配字符串时,它的保留计数是1。 然后,您自动释放字符串,这将在以后减少保留计数。 你用foo。 然后你不需要释放它,因为你已经自动释放了它:它会在以后自动释放。
请注意,您可以使用stringWithFormat或stringWithString来创建已自动释放的字符串。
这会有点整洁。