【问题标题】:Assigning retaining object to weak property; object will be released after assignment将保留对象分配给弱属性;分配后对象将被释放
【发布时间】:2015-03-01 14:27:47
【问题描述】:

我在 Xcode6 上写了 Wikipedia 上的 Objective-C 委托模式示例。每次设置委托时都会出现警告“将保留对象分配给弱属性;分配后对象将被释放”。运行示例后,A 类的方法 f 和 g 不执行。 换行

@property (weak, nonatomic) id i; // 委托

@property (strong, nonatomic) id i; // 委托

解决问题。这是为什么呢?

【问题讨论】:

    标签: objective-c xcode memory-management delegates weak


    【解决方案1】:

    通常,在委托模式中,您希望引用是弱的,因为它引用的委托是另一个对象的 strong 属性。由于这些通常归具有delegate 属性(在您的示例中为i)的对象所有,因此您不想保留对它们的强引用。事实上,你有一个对象是很常见的,比如一个窗口控制器(或 iOS 中的导航控制器),它拥有一个你想将其委托设置回窗口控制器的对象(比如某种控件) (或导航控制器)。

    在这种情况下,您需要将delegate 引用设为弱引用以防止保留循环(否则窗口控制器拥有对控件的引用,该控件拥有对作为委托的窗口控制器的引用)。

    因此,在您上面的示例中,您最好使用一个更真实的示例来探索这个概念,其中委托本身由另一个对象保留,这更接近于在野外使用委托的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-05
      • 1970-01-01
      • 2012-08-16
      相关资源
      最近更新 更多