2010-11-12 64 views

回答

1

如果您不再需要objectuserInfo的所有权,那么它们对于release是安全的。如果通知观察员想要保留objectuserInfo那么他们应该是retain他们。

通知只发送给注册了他们在同一个线程,该通知被传递的对象。有两种方法可以避免混淆:

  1. 只发送和注册主线程通知。这并不能保证事情不会出错,但它应该减少事情出错的可能性。使用performSelectorOnMainThread:组方法来做到这一点。

  2. 使用键值观察而不是通知。大概是因为iOS没有绑定,KVO在iOS上的用处不大。 KVO总是交付并在KVO事件引发的线程上交付。

+0

“通知仅传送给在与传递通知相同的线程上为其注册的对象” - 这是不正确的。这与观察者注册的线程无关。 – 2014-07-10 14:43:29

2

它不会让我评论本笃十六世的答案,所以让我给你从NSNotification类引用一些信息:

在多线程应用程序,通知始终在线程中发送,其中通知被张贴了,这可能不是观察者注册自己的同一个线程。

换句话说,你可以在任何线程NSNotifications注册,和任何线程发送通知将线程观察者的响应。所以如果你在做UI的东西,你需要确保你在主线程上执行选择器。否则,只要您的代码是线程安全的,它并不重要。

相关问题