0

我有以下代码,期望一旦 obj2 被释放 obj1 仍然保留,它会工作吗?

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

2 回答 2

4

我有以下代码,期望一旦 obj2 被释放 obj1 仍然保留,它会工作吗?

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

于 2012-08-08T16:19:06.623 回答
2

它会起作用,但我不确定你的结论是否正确(对此有解析错误)。

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

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

即是obj1强引用,又obj2是弱引用。

如果你想让物体消失,你会[obj1 release]。你可以 [obj2 release],但这意味着所有权转移,只有在充分的理由和非常明确的情况下才能进行。

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

于 2012-08-08T16:53:04.193 回答