在iOS中,是什么阻止我获得对象的委托列表?我知道你不是应该这样做,但我不明白它是否仅仅因为它不符合代表模式或者是否有一些这样做真正的技术问题。我将用一个例子解释我所说的内容:
协议:
@protocol MyDelegate <NSObject>
- (void) someMethod;
@end
班级标题:
@interface SomeClass : NSObject
// Correct use of delegate pattern
@property (nonatomic, weak) id<MyDelegate> delegate;
// Incorrect use of delegate pattern
@property (nonatomic, strong) NSArray<id<MyDelegate>> delegates;
@end
班级实施:
@implementation SomeClass
// Correct use of delegate pattern
- (void) someMethodThatCallsDelegate {
...
[_delegate someMethod];
}
// Incorrect use of delegate pattern
- (void) someMethodThatCallsDelegate {
...
for(id<MyDelegate> delegate in _delegates) {
[delegate someMethod];
}
}
@end
在我自己的项目中,我经常发现自己处于几个对象想知道某个事件的情况。通常在网络类中。在这些情况下,我只是使用NSNotificationCenter
,但只考虑对象的代表列表总是吸引我(因为我也是一个Android程序员,其中一组听众是完全正常的)。那么,没有代表名单的原因是什么?
(我也明白,在很多情况下,为一个对象设置一个以上的代表是不好的设计,但我在谈论它不是的情况,例如在netcode中)
答案 0 :(得分:1)
没有什么可以阻止你这样做。事实上,这可能是我使用协议而不是代表等...
但是,我会考虑你所谓的对象和协议。
delegate
是您的主要对象&#34;委托&#34}的对象。努力工作。一个表格视图(例如)知道它必须有多个行,部分等...但不是计算它们本身,它说&#34;我的代表将为我做这项工作&#34;。然后它允许相同的tableview与任何委托进行交互。
你的物品显然不是那样的,因为它们中有很多。它们可能都有一些共同的用法。这是什么用法?代表是否使用正确的词?
如果他们都是&#34;听众&#34;那么用协议Listener
调用协议someListenedToActionWasTriggered
并调用数组listeners
会更有意义。