您的位置:首页 > 移动开发 > IOS开发

ios开发多线程篇——线程间的通信

2016-04-20 10:35 537 查看
一.简单说明

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

线程间通信的体现:

一个线程传递数据给另一个线程。

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

线程间通信常用方法

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait;

线程间通信示例-图片下载



代码一:

#import "ViewController.h"

@interface ViewController ()

@property(nonatomic,strong) UIImageView *iconView;

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
self.iconView = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];
[self.view addSubview:self.iconView];
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

- (void)download{
//从网络中下载图片
NSURL *url = [NSURL URLWithString:@"http://banbao.chazidian.com/uploadfile/2016-01-25/s145368924044608.jpg"];
//把图片转换成二进制的数据
NSData *data = [NSData dataWithContentsOfURL:url];
//把数据转换成图片
UIImage *image = [UIImage imageWithData:data];
//回到主线程中设置图片
[self performSelectorOnMainThread:@selector(settingImage:)
withObject:image
waitUntilDone:NO];
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

//在子线程中调用download方法下载图片
[self performSelectorInBackground:@selector(download) withObject:nil];
}

- (void)settingImage:(UIImage *)image{
self.iconView.image = image;
}

@end


代码二

#import "ViewController.h"

@interface ViewController ()

@property(nonatomic,strong) UIImageView *iconView;

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
self.iconView = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];
[self.view addSubview:self.iconView];
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

- (void)download:(NSString *)title{
NSLog(@"title=%@",title);
//从网络中下载图片
NSURL *url = [NSURL URLWithString:@"http://banbao.chazidian.com/uploadfile/2016-01-25/s145368924044608.jpg"];
//把图片转换成二进制的数据
NSData *data = [NSData dataWithContentsOfURL:url];
//把数据转换成图片
UIImage *image = [UIImage imageWithData:data];
//回到主线程中设置图片
//第一种方式
//    [self performSelectorOnMainThread:@selector(settingImage:)
//                           withObject:image
//                        waitUntilDone:NO];
//第二种方式
//    [self.iconView performSelector:@selector(setImage:)
//                          onThread:[NSThread mainThread]
//                        withObject:image
//                     waitUntilDone:NO];
//第三种方式
[self.iconView performSelectorOnMainThread:@selector(setImage:)
withObject:image
waitUntilDone:NO];
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

//在子线程中调用download方法下载图片
[self performSelectorInBackground:@selector(download:) withObject:@"下载图片"];
}

- (void)settingImage:(UIImage *)image{
self.iconView.image = image;
}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: