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