NSNotifications的最佳实践

时间:2012-04-09 00:18:31

标签: objective-c ios design-patterns

在我正在编程的游戏中,我为游戏中的所有实体使用复合对象。实体由组件对象组成,这些组件对象定义了一小部分功能,例如运行状况或运动。

我的问题是:

是否可以从组件发布通知,但是引用其父实体作为发送通知的对象?

我很想这样做,因为将观察者添加到实体更容易,而不是在实体中找到正确的组件。

我被告知你不应该发布另一个对象的通知。

有什么优点和缺点?

1 个答案:

答案 0 :(得分:0)

通常,您会将通知视为来自某个对象。因此,如果您正在调试并且想要查找通知源,则可以在该对象本身中查找代码。

违反这种期望并不违法,但是当他们必须更加努力地找到通知的真正来源时,可能会让某些人诅咒你。

此外,如果您有很多单独的组件都发布了通知,那么如果您想要更改通知(例如,其中的userInfo),则重构代码会变得更加困难。

如果您可以保证您的组件始终具有指向其父级的有效指针,那么最佳解决方案是让组件要求其父级发布通知:

@implementation ComponentA

- (void)someMethod
{
     [self.parent pleasePostSomethingChangedNotification];
}

@end

@implementation Parent

- (void)pleasePostSomethingChangedNotification
{
     // Parent may post the notification immediately,
     // or may selectively post the notification based on some other condition,
     // or post it later on after coalescing changes from several components, 
     // or ...
}

@end