Cocoa NSNotificationCenter为';观察员';标准普尔';对象';s
是否有人可以澄清/阐明有关Cocoa NSNotificationCenter为';观察员';标准普尔';对象';s,cocoa,cocoa-touch,Cocoa,Cocoa Touch,是否有人可以澄清/阐明有关-[NSNotificationCenter addObserver:selector:name:object:][/code>的情况 “观察者”和“对象”参数的通知中心保留哪些类型的引用 从通知中心删除观察员的最佳做法是什么 对于多线程应用程序,特别是“对象”参数,有哪些特别的关注点 此方法在GC和非GC环境中的行为有什么不同 在这种方法的行为中,移动环境和桌面环境之间是否存在显著差异(从客户端的角度来看) 此外,任何指向现有文章的指针都将不胜感激。我在谷歌上搜索
-[NSNotificationCenter addObserver:selector:name:object:][/code>的情况
- “观察者”和“对象”参数的通知中心保留哪些类型的引用
- 从通知中心删除观察员的最佳做法是什么
- 对于多线程应用程序,特别是“对象”参数,有哪些特别的关注点
- 此方法在GC和非GC环境中的行为有什么不同
- 在这种方法的行为中,移动环境和桌面环境之间是否存在显著差异(从客户端的角度来看)
此外,任何指向现有文章的指针都将不胜感激。我在谷歌上搜索了一下,但惊讶地发现这些问题几乎没有深入的讨论(尽管可能我没有使用正确的神奇关键词)
哪些类型的参考文献由
通知中心
“观察者”和“对象”参数
我相信这是一个很弱的引用,尽管这只是出于记忆(没有双关语的意思)
最佳实践是什么
将观察员从
通知中心
在发布注册对象之前,请始终从通知中心中删除这些对象。如果对象的dealloc方法本身设置了注册,或者如果另一个对象正在管理通知订阅,则当您释放它时,该对象的dealloc方法是一个很好的位置。记住这一点,以上这些都无关紧要
有什么特别需要关注的
多线程应用程序,
尤其是“object”参数
NSNotificationCenter在线程上运行良好,但是如果您从后台线程发送通知,对象将在同一线程上接收该通知。由于这种行为,如果您正在更新UI或执行任何其他非线程安全的操作(或从主线程上的另一个方法发送通知),则应该使用不同的方法
行为上有什么不同
该方法在GC和非GC中的应用
环境
我不记得听说过任何你需要担心的事情,尽管我还没有太多地使用GC
结果是否有显著差异
(从客户的角度)在
中的移动和桌面环境
这种方法的行为
我没听说过,没有。当你注册你的对象时,你可以选择注册所有通知,或者只注册来自某个对象的通知。如果您大量使用通知,后者可能会快一点,但一定要进行测试
此外,任何指向现有
涉及这方面的文章将是
非常感谢。我在谷歌上搜索过,但是
我惊讶地发现没有什么深入的研究
对这些问题的讨论(尽管
也许我没有使用正确的魔法
关键词)
我认为这更多是因为NSNotificationCenter总体上非常易于使用。如果您担心某些情况,请不要害怕编写快速测试应用程序 2016年的现状:
NSNotificationCenter
以使其弱引用目标对象
也就是说,当对象被解除锁定时,您不再需要removeObserver
in。thx用于编辑chris。特别是在GC下使用NSNotificationCenter时,您不需要发出removeObserver:messages,当您的对象最终确定时,中心对它的任何引用都将被清除。从文档中,NSNotificationCenter
对涉及的所有对象使用不安全的非保留引用(而不是将弱引用归零)。这是因为在解除分配任何对象之前必须调用removeObserver
。