【问题标题】:assign to another object with retain and autorelease使用保留和自动释放分配给另一个对象
【发布时间】:2012-08-08 16:10:54
【问题描述】:

我有下面的代码,期望一旦obj2被释放,obj1仍然保留,会起作用吗?

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

【问题讨论】:

    标签: objective-c memory-management retain autorelease


    【解决方案1】:

    我有如下代码,期望一旦obj2被释放,obj1仍然保留,会起作用吗?

    obj1 和obj2 都是指向同一个对象的指针。创建该对象时,该对象的保留计数为 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 并完成它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-19
        相关资源
        最近更新 更多