将保留对象分配给弱属性;对象将在分配后释放

时间:2015-03-01 14:27:47

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

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

  

@property(弱,非原子)id i; //代表团

  

@property(强,非原子)id i; //代表团

解决问题。那是为什么?

1 个答案:

答案 0 :(得分:2)

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

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

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