一、簡單說明
線程間通信:在1個進程中固耘,線程往往不是孤立存在的梗醇,多個線程之間需要經(jīng)常進行通信
線程間通信的體現(xiàn)
1個線程傳遞數(shù)據(jù)給另1個線程
在1個線程中執(zhí)行完特定任務后捉捅,轉到另1個線程繼續(xù)執(zhí)行任務
- (void)settingImage:(UIImage *)image
{
???? self.iconView.image = image;
}
線程間通信常用方法
1.讓選擇的方法到子線程去執(zhí)行,給該方法傳遞image參數(shù)
[self performSelectorInBackground:@selector(settingImage:) withObject:image];
2.讓選擇的方法到主線程去執(zhí)行,給該方法傳遞image參數(shù),不等待這個方法完成
[self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:NO];
3.讓選擇的方法到子線程去執(zhí)行,給該方法傳遞image參數(shù),不等待方法完成
[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.根據(jù)URL下載圖片
//從網(wǎng)絡中下載圖片
NSURL*urlstr=[NSURLURLWithString:@"fdsf"];
//把圖片轉換為二進制的數(shù)據(jù)
NSData*data=[NSDatadataWithContentsOfURL:urlstr];//這一行操作會比較耗時
//把數(shù)據(jù)轉換成圖片
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;
//}