例如;
TheClass * aInstance = [[TheClass alloc] init];
TheClass * bInstance;
bInstance = aInstance;
[bInstance release]
在这种情况下,是否会释放由aInstance分配的内存?
答案 0 :(得分:2)
是的,它会是,因为只有一个实例 - 你只有两个不同的指针。
与普通C一样,将某个对象的地址(指针)分配给不同的变量与该对象的实际内存分配无关。在Objective-C中,同样的概念适用。如果你想“保留”对一个对象的两个不同的引用,你需要让两个引用“拥有”它。在这种情况下,可能是因为您将第二个引用retain
作为对象,可能是因为您将它存储在实例变量等中。
答案 1 :(得分:2)
是。
听起来你对发生的事情感到有点困惑,所以我会解释一些事情:
aInstance
未分配内存。这只是内存中的一个数字。内存实际上是由TheClass
类分配的。aInstance
只保留该位置(这是一个很大的数字)。而已。此数字被解释为指针(即对内存中另一个位置的引用),但不一定如此。如果您喜欢冒险,可以将它用作int。 bInstance = aInstance;
时,您只是将该号码从一个内存插槽复制到另一个内存插槽。你没有对该变量的对象引用做任何事情。你只是复制一个已经存在的指针。 nil
)。 哇,这是iPhone键盘的很多打字。 :P
答案 2 :(得分:0)
是。您只初始化了一次,并且只发布一次。所以保留计数为0。
规则是:
答案 3 :(得分:0)
是的,它会被释放,并且在发布后不应安全使用aInstance
而不是bInstance
。
答案 4 :(得分:0)
TheClass * aInstance = [[TheClass alloc] init]; //retain count = 1
TheClass * bInstance; //this is a pointer so retain count remain 1
bInstance = aInstance; //the pointer refer to the instance (retain count =1)
[bInstance release] //release => retain count =0, object released
答案 5 :(得分:0)
是的,它将被释放。
如果你更换“bInstance = aInstance;”用:
bInstance = [aInstst retain];
在您再次释放内存之前,它不会释放内存。虽然您可能希望将自动释放用于短期使用。