多线程---线程间通讯

举个例子:

程序一启动,就会开启主线程,主线程是一条路往下走的。

如果运行到一定程度,想做一些比较耗时的操作(下载网络图片),不能在主线程做,因为会阻塞主线程,导致主线程上的任务没法继续往下执行。

这个时候,就要开启一条子线程,将耗时操作(下载网络图片)放到子线程去执行。

两条线程各自都是一条路往下走,当子线程的耗时操作执行完毕后(网络图片下载完毕),这时候需要回到主线程刷新UI

这里就牵扯到线程之间的通讯。

实际上就是:从一条线程回到另一条线程 或者 从一条线程传递数据给另一条线程,这就是线程间通讯

怎么通讯?

1)方法一:  GCD的方法

2)方法二:

// 只能和主线程通讯

1 - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait modes:(NSArray *)array;
2 - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;

 

// 可以和任何线程通讯

1 - (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait modes:(NSArray *)array
2 - (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait; 

 

3)方法三:NSMachPort  属于手动管理线程的范畴(了解即可)

Mach是最先应用多线程技术的操作系统,所以多线程技术是基于Mach操作系统的。

主线程和子线程是通过各自的 NSMachPort 端口来实现通讯。

原文地址:https://www.cnblogs.com/xdl745464047/p/4357009.html