objective-c - NSNotifications 的最佳实践

标签 objective-c ios design-patterns

在我编写的游戏中,我为游戏中的所有实体使用了一个复合对象。实体由组件对象组成,这些组件对象定义了小块功能,例如健康或运动。

我的问题是:

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

我很想这样做,因为向实体添加观察者比在实体内部找到正确的组件更容易。

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

有什么优点和缺点?

最佳答案

通常您认为通知是“来自”一个对象。因此,如果您正在调试并且想要找到通知的来源,您可以在该对象本身中查找代码。

违反该期望并不违法,但当有人不得不更加努力地寻找通知的真正来源时,这可能会让他们稍微诅咒你。

此外,如果您有很多单独的组件都发布通知,那么如果您想要更改通知(例如,其中的 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

关于objective-c - NSNotifications 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10067640/

相关文章:

objective-c - 使用 Ruby coreaudio gem

ios - 通过 swift 集成新的 facebook SDK

ios - 从静态/静态图像中读取二维码

ios - 每行可变 NSTextCell 宽度/计数——这可能吗?

iphone - 音频停止时做点什么

将方法名称保存在属性文件中的 Java 设计模式

objective-c - 以编程方式创建 UITextFields

ios - OpenGLES将代码混合到 Metal 翻译

JavaScript 库模式

java - 如何设计一个可能使用skip的返回流