多线程---线程间通讯
举个例子:
程序一启动,就会开启主线程,主线程是一条路往下走的。
如果运行到一定程度,想做一些比较耗时的操作(下载网络图片),不能在主线程做,因为会阻塞主线程,导致主线程上的任务没法继续往下执行。
这个时候,就要开启一条子线程,将耗时操作(下载网络图片)放到子线程去执行。
两条线程各自都是一条路往下走,当子线程的耗时操作执行完毕后(网络图片下载完毕),这时候需要回到主线程刷新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 端口来实现通讯。
人生之路,不忘初心,勿忘始终!