内存管理分配新对象

时间:2011-02-14 21:29:40

标签: iphone objective-c memory-management

假设我有一个实例变量,我将其定义为保留在头文件中。在初始化类时,我为它分配一个对象。现在假设在某个函数中我将一个新对象分配给我的实例变量。我是否需要释放以前保留的对象?

4 个答案:

答案 0 :(得分:5)

取决于您如何分配它。如果直接将其分配给成员变量,那么是的,您需要释放旧的变量。如果您使用公共财产分配,例如self.propertyname然后旧的将自动释放。

答案 1 :(得分:1)

如果您分配了一个新对象,并且想要将其分配给已经“拥有”的对象,那么您必须释放该对象并获得新对象的“所有权”。

答案 2 :(得分:0)

不,只要您使用设置器(直接或带点表示法),自动生成的保留设置器将在必要时调用释放。 setter看起来像这样:

-(void)setObject:(id)newObject{
    if(newObject != myCurrentObject){
       [myCurrentObject release];
       myCurrentObject = [newObject retain];
    }
}

请参阅Apple的Memory Management Programming Guide - Section Accessor Methods

答案 3 :(得分:0)

不,生成的setter方法将释放/自动释放ivar先前为该属性引用的值。

Apple的内存管理文档虽然冗长,但为了更好地理解,非常值得阅读。

Apple's Memory Management Documentation