2012-08-08 61 views

回答

4

我有下面的代码,希望一旦obj2的释放OBJ1仍然保留,将它的工作?

obj1obj2都是指针到同一对象。创建该对象时,该对象的保留计数为1。当您在第二行再次保留对象时,对象的保留计数会增加到2。对象(及其指向它的任何指针)因此将保持有效,直到它被释放两次。其中一个版本最终将来自第二行的autorelease;另一个应该由你的代码在某处提供。

2

它会工作,但我不确定你的结论是正确的(有一个解析错误)。

obj1 = [[Class1 alloc] init]; 
obj2 = [[obj1 retain] autorelease]; 

它有助于考虑delta和per-reference方面的保留和释放。因此,在下面的代码中,您会说“obj1引用的保留计数为+1”,“obj2引用的保留计数为+0”。

也就是obj1是一个很强的参考,obj2是一个弱的参考。

如果你想让对象消失,你会[obj1 release]。您可以可能[obj2 release],但这意味着所有权转让应该只是出于很好的理由和相当明确。

或者你可以打开ARC并完成它。

相关问题