今天被问到一个问题,如果在子线程发通知,主线程能不能收到通知。
答:肯定收不到。为什么?因为线程间没有这样的通信机制。下面是苹果关于通知的官方文档:
In a multithreaded application, notifications are always delivered in the thread in which the notification was posted, which may not be the same thread in which an observer registered itself.(在多线程应用程序中,通知总是在通知发布的线程中传递,这可能与观察者注册的线程不相同。)
这段话的意思是说,注册观察者是一个线程,触发方法可能在另一个线程中执行,但是这个线程必须和发通知的线程一致。另外如果收到通知是为了刷新UI的话,那么这个触发方法必须放在主线程,发通知也必须放在主线程。