线程间通信怎么实现

一、简单说明

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

线程间通信的体现

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

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

- (void)settingImage:(UIImage *)image

{

     self.iconView.image = image;

}

线程间通信常用方法

1.让选择的方法到子线程去执行,给该方法传递image参数

[self performSelectorInBackground:@selector(settingImage:) withObject:image];

2.让选择的方法到主线程去执行,给该方法传递image参数,不等待这个方法完成

[self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:NO];

3.让选择的方法到子线程去执行,给该方法传递image参数,不等待方法完成

[self performSelector:@selector(settingImage:) onThread:[NSThread new] withObject:image waitUntilDone:NO];



实用代码:

-(void)touchesBegan:(NSSet*)toucheswithEvent:(UIEvent*)event

{

// 在子线程中调用download方法下载图片

[selfperformSelectorInBackground:@selector(download)withObject:nil];

}

-(void)download

{

//1.根据URL下载图片

//从网络中下载图片

NSURL*urlstr=[NSURLURLWithString:@"fdsf"];

//把图片转换为二进制的数据

NSData*data=[NSDatadataWithContentsOfURL:urlstr];//这一行操作会比较耗时

//把数据转换成图片

UIImage*image=[UIImageimageWithData:data];

//2.回到主线程中设置图片

//第一种方式

//    [self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:NO];

//第二种方式

//    [self.imageView performSelector:@selector(setImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:NO];

//第三种方式

[self.iconViewperformSelectorOnMainThread:@selector(setImage:)withObject:imagewaitUntilDone:NO];

}

//设置显示图片

//-(void)settingImage:(UIImage *)image

//{

//    self.iconView.image=image;

//}

你可能感兴趣的:(线程间通信怎么实现)