一.线程间通信
1.什么叫做线程间通信
在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信。
2.线程间通信的体现
1个线程传递数据给另1个线程
在1个线程中执行完特定任务后,转到另1个线程继续执行任务
二.线程间通信示例图片下载图解:
三.线程间通信方式
1.NSThread
线程间通信常用方法
- (void)performSelectorOnMainThread:(SEL)aSelectorwithObject:(id)argwaitUntilDone:(BOOL)wait;
- (void)performSelector:(SEL)aSelectoronThread:(NSThread*)thrwithObject:(id)argwaitUntilDone:(BOOL)wait;
Doome:
https://github.com/tangbinbinM/communicationThread.git
2.GCD
从子线程回到主线程
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
//图片的网络路径
NSURL*url = [NSURLURLWithString:@"https://car3.autoimg.cn/cardfs/product/g4/M06/88/CC/1024x0_1_q87_autohomecar__wKgH2lYChi6ATzdCAAe3AiAaA8s976.jpg"];
//加载图片
NSData*data = [NSDatadataWithContentsOfURL:url];
//生成图片
UIImage*image = [UIImageimageWithData:data];
//回到主线程
dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image= image;
});
});
3.NSOperation
[[[NSOperationQueuealloc]init]addOperationWithBlock:^{
//图片的网络路径
NSURL*url = [NSURLURLWithString:@"https://car3.autoimg.cn/cardfs/product/g4/M06/88/CC/1024x0_1_q87_autohomecar__wKgH2lYChi6ATzdCAAe3AiAaA8s976.jpg"];
//加载图片
NSData*data = [NSDatadataWithContentsOfURL:url];
//生成图片
UIImage*image = [UIImageimageWithData:data];
//回到主线程
[[NSOperationQueuemainQueue]addOperationWithBlock:^{
self.imageView.image= image;
}];
}];
4.利用NSPort
网友评论