我的一部分认为我理解 NSNotification 概念。这是一个集中的广播系统,带有基于字符串的通知。在一侧张贴,在另一侧或多侧观察并采取相应行动。不过,我的另一部分,即必须编写代码的部分,每次我需要通知时都会感到困惑。哪些代码进入哪个标头/实现,哪些文件实际进行观察以及如何防止它变得一团糟?是时候把它理顺了,你能帮我验证这些假设吗?我对第 4 名相当有信心,但第 5 名中奖了。
- NSNotification 是在 [NSNotification defaultCenter] 的帮助下创建的,不会分配/初始化 NSNotification。正确的?
- 执行 postNofification 壮举的对象始终传递
self
到发布代码:[[NSNotificationCenter defaultCenter] postNotificationName:@"note name" object:self]
。正确的? - 事件冒泡存在于其他语言中,但在带有 NSNotification 的 Objective-C 中不存在。您不传递通知,您使通知名称足够具体以供全球广播使用。正确的?
- 如果您仍想传递对象 A 发布的通知,您可以在 B 中观察它,处理它并发布一个新的、更具体的通知以供对象 C 观察。例如。
@"MenuItemTapped"
从 A 到 B,@"NavigateTo"
从 B 到 C。对吗? - 通知的名称是一个 NSString。因为发布者和观察者都希望避免拼写错误,我们将 NSString 常量存储在[extern const|define|class method|none of the above]中。你能帮我挑一个吗?
- 一种尝试是创建类似
NotificationNames.h
文件的东西,其中包含所有extern NSString *const NOTE_NAME
声明。然而,这破坏了通知的可移植性。 - 另一种尝试是对 NSNotification 进行子类化(使用 XCode 模板来保持快速创建),但是因为这个概念是从 AS3 中的 Event-class 的子类中获取的,所以它看起来非常不客观。还有一个奇怪的问题是你不能在 NSNotification 上调用 [super init],所以事情开始失控了。
- 我对这个问题的麻烦来自于繁琐的
#import
陈述。如何最小化拼写错误,同时保持常量/定义的可移植性?
- 一种尝试是创建类似