回调的代表数组不安全?

时间:2013-04-04 00:46:45

标签: iphone ios objective-c design-patterns automatic-ref-counting

我理解在iOS的委托模式中,您希望对委托的引用很弱,但是如果我有这样的话:

@property (nonatomic, weak) NSMutableArray *delegates;

并且在此数组中是

的实例
id<myDelegateCallback>

数组内部的项目有很强的保留。

我是否在具有此属性的类中分配/初始化数组,或者将数组设置为另一个类拥有的实例?

或者,这不是代表模式的良好实现吗?我知道我可以使用Notifications等,但想知道这是否真的可以在没有ARC问题的情况下工作。

2 个答案:

答案 0 :(得分:2)

您只能有一个指定的委托对象,而不是一个委托数组。某些类具有委托和符合唯一协议的“数据源”,但这仅适用于需要从某个指定位置获取其内容的对象。

但是,如果您想要通知某些事物的多个侦听对象,请考虑使用NSNotification注册NSNotificationCenter。缺点是没有正式或声明的协议方法供侦听器遵守(并且编译器会抱怨是否存在任何问题)。

Here's a related question with more useful information

答案 1 :(得分:2)

如果确实需要一组弱委托,您可以使用已初始化CFMutableArray的桥接NULL保留并释放回调。

在此处查看更多内容:https://developer.apple.com/library/mac/#documentation/CoreFOundation/Reference/CFMutableArrayRef/Reference/reference.html#//apple_ref/doc/uid/20001502