将通知(NSNotification)作为另一个通知的 userInfo 传递是否安全?

Is it safe to pass a notification (NSNotification) as a userInfo of another notification?

我有一个响应通知列表(A、B、C...)的对象。每个响应都以向其他侦听器发布新通知 (X) 结束。我想包含 old/original 通知——我的意思是整个 NSNotification 实例——作为新通知 (X) 的 userInfo 字典中的一个值。这样安全吗?

(我的直觉是不是,但如果不小心处理字典内容,除了可能出现一些循环引用之外,我没有看到任何特殊问题)。

NSNotification 个实例作为 value 包含在另一个的 userInfo 字典中是安全的。 NSNotification 本身真的没有魔法。这是一个代表通知*的漂亮 simple/thin 模型 class。正如您提到的,您将希望避免保留周期,例如同时在彼此的用户信息词典中包含两个通知。即便如此,最坏的情况还是会发生内存泄漏(对于两个通知来说很小)。

*从技术上讲,NSNotification 是一个抽象的 class 集群,当您直接实例化一个 NSNotification 时,您实际上得到了私有 NSConcreteNotification 的一个实例(从 macOS 开始) 10.15.1), 但这不影响对你问题的回答。