(七)iOS开发之多线程—多线程之间通信

一.线程间通信

1.什么叫做线程间通信

在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信。

2.线程间通信的体现

1个线程传递数据给另1个线程

在1个线程中执行完特定任务后,转到另1个线程继续执行任务

二.线程间通信示例图片下载图解:

(七)iOS开发之多线程—多线程之间通信_第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

http://blog.csdn.net/yxh265/article/details/51483822 (转)

你可能感兴趣的:((七)iOS开发之多线程—多线程之间通信)