任何人都可以澄清/阐明这种情况-[NSNotificationCenter addObserver:selector:name:object:]
吗?
"观察者"和"对象"参数的通知中心保留了哪些类型的引用?
从通知中心删除观察员的最佳做法是什么?
多线程应用程序有哪些特殊问题,特别是关于"对象"参数?
GC和非GC环境中此方法的行为有何不同?
在此方法的行为中,移动和桌面环境之间是否存在任何显着差异(从客户角度来看)?
此外,任何指向现有文章的指针都将非常感激.我用谷歌搜索,但很惊讶地发现对这些问题的深入讨论(尽管我可能没有使用正确的魔术关键词).
"观察者"和"对象"参数的通知中心保留了哪些类型的引用?
我相信一个弱的参考,虽然这只是来自记忆(没有双关语意).
从通知中心删除观察员的最佳做法是什么?
始终在注册对象发布之前将其从通知中心中删除.如果对象的dealloc方法设置了注册本身,或者当另一个对象正在管理通知订阅时释放它,那么该对象的dealloc方法是一个好的地方.记住这一点,上述内容无关紧要.
多线程应用程序有哪些特殊问题,特别是WRT'对象'参数?
NSNotificationCenter在线程上运行良好,但如果从后台线程发送通知,该对象将在同一线程上接收它.由于这种行为,如果您正在更新UI或执行其他非线程安全的操作(或者从主线程上的另一个方法调度通知),则应使用不同的方法.
GC和非GC环境中此方法的行为有何不同?
我不记得听到你需要担心的任何事情,尽管我还没有使用GC.
在此方法的行为中,移动和桌面环境之间的任何显着差异(从客户角度来看)是什么?
不是我听说过,不是.注册对象时,您可以选择注册所有通知或仅注册来自特定对象的通知.如果您正在大量使用通知,后者可能会快一点,但总是要测试以确保.
此外,任何指向现有文章的指针都将非常感激.我用Google搜索,但很惊讶地发现对这些问题的深入讨论(尽管我可能没有使用正确的魔术关键字).
我认为这更是因为NSNotificationCenter一般来说非常容易使用.如果你担心某些情况,不要害怕写一个快速测试应用程序!
2016年现状:
iOS 9已更改 NSNotificationCenter
,弱引用目标对象.
这也就是说你不再需要removeObserver
在对象是dealloc的时候.