首先还是得实现NSMachPortDelegate相关协议中的方法,下方代码段中的notificationQueue用来纯粹子线程发出的所有通知,mainThread则是用来储存主线程了,lock则是对通知队列加锁,避免多个线程同时操作该队列所出现的数据不一致问题。mackPort则是用于向期望线程发送信号的通信端口。
下方的代码段则是对上述字段的赋值。
接着我们在viewDidLoad方法中打印了注册通知的线程,当然此处是主线程了。然后在子线程中异步的发送一条通知,具体代码如下所示:
下方就是收到通知后所执行的方法,在该方法中,我们看到做了一个判断。如果该方法是在我们预期的主线程中被执行的话,那么我们就执行收到通知后所要执行的任务。如果不是我们预期的主线程的话,接下来走的就是通过MachPort来转发到主线程了。
在转发通知前要把当前方法所接收到的notification入队列暂存,等转发后,在MachPort的相关代理方法中取出相关的通知并做相关处理。
下方代码段就是处理MachPort所转发过来的消息。在该方法中取出了队列中暂存的相关通知并进行了相关处理。代码如下所示。
下方是具体的运行结果:
本篇博客所涉及demo在github上的分享地址如下:
https://github.com/lizelu/NotificationWithSubThread