我有以下代码,期望一旦obj2被释放,obj1仍然保留,它会起作用吗?
obj1 = [[Class1 alloc] init];
obj2 = [[obj1 retain] autorelease];
答案 0 :(得分:4)
我有以下代码,期望一旦obj2被释放,obj1仍然保留,它会起作用吗?
obj1
和obj2
都是指向同一对象的指针。创建它时,该对象的保留计数为1。当您在第二行再次保留时,对象的保留计数增加到2。因此,对象(以及它的任何指针)将保持有效,直到它被释放两次。其中一个版本最终将来自第二行的autorelease
;另一个应该由您的代码提供。
答案 1 :(得分:2)
它会起作用,但我不确定你的结论是否正确(有解析错误)。
obj1 = [[Class1 alloc] init];
obj2 = [[obj1 retain] autorelease];
根据delta和per-reference来考虑保留和释放是有帮助的。因此,在下面的代码中,您会说“obj1引用的保留计数为+1”,“obj2引用的保留计数为+0”。
也就是说,obj1
是强引用,obj2
是弱引用。
如果你想让对象消失,你会[obj1 release]
。您可以 [obj2 release]
,但这意味着所有权转让应该只是出于充分的理由而且非常明确。
或者你可以打开ARC并完成它。