可可 – NSNotificationCenter为“观察者”对象提供什么类型的参考?

任何人可以澄清/阐明相关的情况 – [NSNotificationCenter addobserver:selector:name:object:]?

>“观察者”和“对象”参数的通知中心保留哪些类型的引用?
>从通知中心清除观察员的最佳做法是什么?
>多线程应用程序有什么特别的关注点,特别是对于’object’参数呢?
> GC和非GC环境中此方法的行为有什么区别?
>在这方法的行为中,移动和桌面环境之间是否有明显的差异(从客户角度看)?

此外,对于覆盖这一点的现有文章的任何指针都将不胜感激。我有谷歌,但很惊讶地发现这些问题的深入讨论(虽然也许我没有使用正确的魔术关键词)。

解决方法

what types of references are kept by
the notification center of the
‘observer’ and ‘object’ arguments?

我相信一个薄弱的参考,虽然这只是从记忆(不是双关语)。

what are the best practices for
removing observers from the
notification center?

发布之前,请务必从通知中心删除注册的对象。如果对象的dealloc方法设置了注册本身,或者如果另一个对象正在管理通知订阅,则释放该对象的dealloc方法。记住这一点,以上并不重要。

what are the special concerns for
multi-threaded applications,
especially WRT the ‘object’ argument?

NSNotificationCenter在线程上工作正常,但是如果从后台线程发送通知,则对象将在同一线程上接收到该通知。由于这种行为,如果您正在更新UI或执行任何其他不是线程安全的操作(或者从主线程上的其他方法调度通知),则应该使用其他方法

what are the differences in behavior
of this method in GC and non-GC
environments?

我不记得你需要担心的任何事情,虽然我还没有使用GC。

are the any significant differences
(from a client perspective) between
mobile and desktop environments in
this method’s behavior?

不是我听说过的,没有。当您注册对象时,您可以选择注册所有通知或仅注册某个对象的通知。如果您大量使用通知,后者可能会更快一些,但总是要确定。

Also,any pointers to existing
articles which cover this would be
greatly appreciated. I googled,but
was surprised to find little in-depth
discussion of these issues (although
maybe i didn’t use the right magic
keywords).

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

相关文章

我正在用TitaniumDeveloper编写一个应用程序,它允许我使用Ja...
我的问题是当我尝试从UIWebView中调用我的AngularJS应用程序...
我想获取在我的Mac上运行的所有前台应用程序的应用程序图标....
我是一名PHP开发人员,我使用MVC模式和面向对象的代码.我真的...
OSX中的SetTimer在Windows中是否有任何等效功能?我正在使用...
我不确定引擎盖下到底发生了什么,但这是我的设置,示例代码和...