【发布时间】:2012-06-05 21:06:09
【问题描述】:
我希望对单个对象的多个事件有多个观察者(一对 N 关系)。
NSNotificationCenter 提供了实现此任务的机制。当用于我的问题时,该机制看起来有点矫枉过正。
如何在不使用NSNotificationCenter 的情况下手动操作:
- (void)addDelegate:(id<DelegateProtocol>)delegate;
- (void)removeDelegate:(id<DelegateProtocol>)delegate;
从我的对象中添加和删除观察者。
- (void)someEventFired:(NSObject<NSCopying> *)eventData
{
for (id delegate in delegates) {
NSObject *data = [eventData copy];
[delegate someEventFired:data];
}
}
这种机制简单易行,无需对象共享额外的字符串。
- 除了
NSNotificationCenter之外,iOS 框架中是否还有官方的 1 对 N 委托(如 C# 事件)模式? - 什么时候应该使用
NSNotificationCenter,什么时候不应该使用? - 什么时候应该使用我在这里建议的实现,什么时候不应该使用?
【问题讨论】:
-
我很少或曾经使用过 NSNotificationCenter ,但使用了与您描述的相同的方法。多年来,我已经在许多 iOS 应用程序(我会说超过 50 个应用程序)中使用它,到目前为止我还没有看到任何问题。一个可能的问题是您有时需要确保删除观察者,或者它们可能不会在预期的时候被释放,因为它们被代表的保管者保留。
-
我认为即使 NSNotificationCenter 不是我们从 C# 中知道的方法,我们仍然应该专注于为我们正在工作的特定平台使用设计模式。也就是说,我现在在几个应用程序中使用了 NSNotificationCenter(虽然没有你那么多),而且我不认为代码通过它变得更糟。
标签: objective-c ios architecture observer-pattern nsnotificationcenter