我是否需要保留我在论证中收到的对象?

时间:2011-02-06 23:57:18

标签: cocoa memory-management

如果我有一个使用输入的方法,我必须保留吗?

- (void) exampleMethod: (NSString *)input {
    self.hey = [input retain];
}

如果我多次使用input该怎么办?

3 个答案:

答案 0 :(得分:2)

您不需要保留在方法期间只打算使用的参数。如果你要更长时间地保持对它的引用(正如你在你的例子中那样),那么在大多数情况下你应该这样做。

但是,如果你正在使用一个属性(你似乎也在这里),你应该在属性设置器本身内管理内存,而不是在调用setter时显式调用retain。

答案 1 :(得分:2)

阅读Memory Management Rules。如果hey是设置了retaincopy属性的属性,则您无需在其上调用-retain(您只需执行self.hey = input) 。

答案 2 :(得分:1)

在这种情况下,保留的.hey属性的赋值在访问器方法中是有意义的。

Accessor Methods

如果要在不使用访问器方法的情况下继续使用字符串,则可能需要保留字符串以及使其可用的范围。