Iphone 赋值:属性和类变量之间的差异?

Iphone 赋值:属性和类变量之间的差异?,iphone,properties,variable-assignment,class-variables,Iphone,Properties,Variable Assignment,Class Variables,我注意到我很少使用属性,因为我很少需要在类之外访问对象的变量;) 所以我通常会: NSMutableArray *myArray; // not a property ! 我的问题是:即使我没有将myArray声明为属性,如果我这样做,iphone是否会保留 myArray = arrayPassedToMe; 我想是的,但我只是想确认一下;) 欢迎有任何想法 Gotye如果您不使用“retain”声明属性,则不会进行retain调用。通常最好使用属性访问器(在所有情况下,它使内存管理更加简

我注意到我很少使用属性,因为我很少需要在类之外访问对象的变量;)

所以我通常会:

NSMutableArray *myArray; // not a property !
我的问题是:即使我没有将myArray声明为属性,如果我这样做,iphone是否会保留

myArray = arrayPassedToMe;
我想是的,但我只是想确认一下;)

欢迎有任何想法


Gotye

如果您不使用“retain”声明属性,则不会进行retain调用。通常最好使用属性访问器(在所有情况下,它使内存管理更加简单),但是您可以执行手动保留:

myArray = [otherArray retain];

为了补充Kevin的答案,在本例中,您还需要确保myArray当前指向的任何现有对象在为其指定新值之前都已释放,这意味着:

[myArray release];
myArray = [otherArray retain];

当您通过声明的属性访问类变量时,所有这些保留/释放内存的操作都会自动为您完成,使您的生活更加轻松。

如果我理解,如果我只做myArray=otherArray;myArray将是对otherArray的引用吗?所以如果otherArray被释放,myArray会自动释放,对吗?如果otherArray被修改,myArray也会被修改?是的,AFAIK语句只会创建一个引用。如果你不想让物体停留,你应该保留它。