iOS开发之线程间的MachPort通信与子线程中的Notification转发 (2)

首先还是得实现NSMachPortDelegate相关协议中的方法,下方代码段中的notificationQueue用来纯粹子线程发出的所有通知,mainThread则是用来储存主线程了,lock则是对通知队列加锁,避免多个线程同时操作该队列所出现的数据不一致问题。mackPort则是用于向期望线程发送信号的通信端口。

   

iOS开发之线程间的MachPort通信与子线程中的Notification转发

下方的代码段则是对上述字段的赋值。

  

iOS开发之线程间的MachPort通信与子线程中的Notification转发

 

接着我们在viewDidLoad方法中打印了注册通知的线程,当然此处是主线程了。然后在子线程中异步的发送一条通知,具体代码如下所示:

   

iOS开发之线程间的MachPort通信与子线程中的Notification转发

 

 下方就是收到通知后所执行的方法,在该方法中,我们看到做了一个判断。如果该方法是在我们预期的主线程中被执行的话,那么我们就执行收到通知后所要执行的任务。如果不是我们预期的主线程的话,接下来走的就是通过MachPort来转发到主线程了。

在转发通知前要把当前方法所接收到的notification入队列暂存,等转发后,在MachPort的相关代理方法中取出相关的通知并做相关处理。 

  

iOS开发之线程间的MachPort通信与子线程中的Notification转发

 

下方代码段就是处理MachPort所转发过来的消息。在该方法中取出了队列中暂存的相关通知并进行了相关处理。代码如下所示。

  

iOS开发之线程间的MachPort通信与子线程中的Notification转发

下方是具体的运行结果:

iOS开发之线程间的MachPort通信与子线程中的Notification转发

 

 

本篇博客所涉及demo在github上的分享地址如下:

https://github.com/lizelu/NotificationWithSubThread

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzyjj.html