假设我有一个实例变量,我将其定义为保留在头文件中。在初始化类时,我为它分配一个对象。现在假设在某个函数中我将一个新对象分配给我的实例变量。我是否需要释放以前保留的对象?
答案 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的内存管理文档虽然冗长,但为了更好地理解,非常值得阅读。