2012-08-08 62 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並完成它。

相關問題