当前位置:  开发笔记 > 编程语言 > 正文

NSNotificationCenter为"观察者"和"对象"保留了哪种类型的参考?

如何解决《NSNotificationCenter为"观察者"和"对象"保留了哪种类型的参考?》经验,为你挑选了2个好方法。

任何人都可以澄清/阐明这种情况-[NSNotificationCenter addObserver:selector:name:object:]吗?

"观察者"和"对象"参数的通知中心保留了哪些类型的引用?

从通知中心删除观察员的最佳做法是什么?

多线程应用程序有哪些特殊问题,特别是关于"对象"参数?

GC和非GC环境中此方法的行为有何不同?

在此方法的行为中,移动和桌面环境之间是否存在任何显着差异(从客户角度来看)?

此外,任何指向现有文章的指针都将非常感激.我用谷歌搜索,但很惊讶地发现对这些问题的深入讨论(尽管我可能没有使用正确的魔术关键词).



1> Marc Charbon..:

"观察者"和"对象"参数的通知中心保留了哪些类型的引用?

我相信一个弱的参考,虽然这只是来自记忆(没有双关语意).

从通知中心删除观察员的最佳做法是什么?

始终在注册对象发布之前将其从通知中心中删除.如果对象的dealloc方法设置了注册本身,或者当另一个对象正在管理通知订阅时释放它,那么该对象的dealloc方法是一个好的地方.记住这一点,上述内容无关紧要.

多线程应用程序有哪些特殊问题,特别是WRT'对象'参数?

NSNotificationCenter在线程上运行良好,如果从后台线程发送通知,该对象将在同一线程上接收它.由于这种行为,如果您正在更新UI或执行其他非线程安全的操作(或者从主线程上的另一个方法调度通知),则应使用不同的方法.

GC和非GC环境中此方法的行为有何不同?

我不记得听到你需要担心的任何事情,尽管我还没有使用GC.

在此方法的行为中,移动和桌面环境之间的任何显着差异(从客户角度来看)是什么?

不是我听说过,不是.注册对象时,您可以选择注册所有通知或仅注册来自特定对象的通知.如果您正在大量使用通知,后者可能会快一点,但总是要测试以确保.

此外,任何指向现有文章的指针都将非常感激.我用Google搜索,但很惊讶地发现对这些问题的深入讨论(尽管我可能没有使用正确的魔术关键字).

我认为这更是因为NSNotificationCenter一般来说非常容易使用.如果你担心某些情况,不要害怕写一个快速测试应用程序!



2> samwize..:

2016年现状:

iOS 9已更改 NSNotificationCenter,弱引用目标对象.

这也就是说你不再需要removeObserver在对象是dealloc的时候.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有