【发布时间】:2012-08-08 16:10:54
【问题描述】:
我有下面的代码,期望一旦obj2被释放,obj1仍然保留,会起作用吗?
obj1 = [[Class1 alloc] init];
obj2 = [[obj1 retain] autorelease];
【问题讨论】:
标签: objective-c memory-management retain autorelease
我有下面的代码,期望一旦obj2被释放,obj1仍然保留,会起作用吗?
obj1 = [[Class1 alloc] init];
obj2 = [[obj1 retain] autorelease];
【问题讨论】:
标签: objective-c memory-management 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 并完成它。
【讨论】: