假如我们需要下载一张图片,因为下载图片是耗时操作,需要开辟新线程把下载图片操作放入子线程中执行。
通过这个方法就可以把下载图片操作放入到子线程中
[self performSelectorInBackground:@selector(downloadImage) withObject:nil];
下载图片:
// 1. url是确定网络上的资源路径
NSURL *url = [NSURL URLWithString:@"http://img1.3lian.com/2015/w7/99/d/81.jpg"];
// 2. 通过url下载对应的网络资源, 网络资源传输的都是二进制
NSData *data = [NSData dataWithContentsOfURL:url];
// 3. 将二进制转成图片
UIImage *image = [UIImage imageWithData:data];
// 4. 把图片显示到imageView
//self.imageView.image = image;这里需要把数据传到主线程,在主线程去更新UI更妥些
//5.把数据传入主线程中的的方法
方法1:[self performSelectorOnMainThread:@selector(downloadFinish:) withObject:image waitUntilDone:NO];
方法2:
[self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];
方法3:
[self performSelector:@selector(downloadFinish:) onThread:[NSThread mainThread] withObject:image waitUntilDone:NO];
// waitUntilDone:表示是否等待@selector(downloadFinish:) 方法执行完成
// 如果是YES,就等待setImage在其他线程执行结束,再往下执行
下面是代码: