初始化另一个类的实例变量和内存管理

时间:2011-06-06 15:24:57

标签: iphone memory-management

嘿所有,这是我一直想知道的事情,从来没有真正弄明白。如果我分配并初始化另一个类的实例变量/属性(下面的示例),我是否负责释放它?

在Foo中,我有一个Bar实例(称为bar),并想要像这样初始化一个Bar的变量:

self.bar.variable1 = [[UIBarButtonItem alloc] initWithCustomView:customView];

4 个答案:

答案 0 :(得分:4)

Foo负责释放它创建的UIBarButtonItem,因为Foo 拥有它。只需向autorelease发送UIBarButtonItem消息即可完成此操作。否则,这将泄漏。

self.bar.variable1 = [[[UIBarButtonItem alloc] initWithCustomView:customView] autorelease];

如果Bar需要保留variable1,则必须声明UIBarButtonItem的所有权。 Bar负责UIBarButtonItem本身保留(然后在将来某个时候发布)。

答案 1 :(得分:1)

通常,负责分配对象的任何类都被视为对象的所有者,因此负责释放实例。 Memory Management Programming Guide给出了很好的描述,特别是在“对象所有权和处置”部分

答案 2 :(得分:1)

可能会让你更容易理解。

UIBarButtonItem * buttonItem = [[UIBarButtonItem alloc] initWithCustomView:customView]
self.bar.variable1 = buttonItem;
[buttonItem release];

答案 3 :(得分:0)

YES。除非你没有在Bar类中发布它,否则你必须释放它。