线程间通信的体现
- 1、一个线程传递数据给另一个线程
- 2、在一个线程中执行完特定任务后,转到另一个线程继续执行任务
1、NSThread 可以先将自己的当前线程对象注册到某个全局的对象中去,这样相互之间就可以获取对方的线程对象,然后就可以使用下面的方法进行线程间的通信了,由于主线程比较特殊,所以框架直接提供了在主线程执行的方法
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait;
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable id)arg waitUntilDone:(BOOL)wait NS_AVAILABLE(10_5, 2_0);
2、GCD
//开启一个全局队列的子线程
dispatch_async(dispatch_get_global_queue(0, 0), ^{
//1. 开始请求数据
//...
// 2. 数据请求完毕
//我们知道UI的更新必须在主线程操作,所以我们要从子线程回调到主线程
dispatch_async(dispatch_get_main_queue(), ^{
/我已经回到主线程更新
});
});