首页 > 代码库 > 开子线程下载图片,回到主线程刷新UI步骤
开子线程下载图片,回到主线程刷新UI步骤
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [NSThread detachNewThreadSelector:@selector(download) toTarget:self withObject:nil]; } #pragma mark ---------------------- #pragma Methods //开子线程下载图片,回到主线程刷新UI -(void)download { //1.确定URL NSURL *url = [NSURL URLWithString:@"http://img4.duitang.com/uploads/blog/201310/18/20131018213446_smUw4.thumb.700_0.jpeg"]; //2.根据url下载图片二进制数据到本地 NSData *imageData =http://www.mamicode.com/ [NSData dataWithContentsOfURL:url]; //3.转换图片格式 UIImage *image = [UIImage imageWithData:imageData]; NSLog(@"download----%@",[NSThread currentThread]); //4.回到主线程显示UI /* 第一个参数:回到主线程要调用哪个方法 第二个参数:前面方法需要传递的参数 此处就是image 第三个参数:是否等待 */ //[self performSelectorOnMainThread:@selector(showImage:) withObject:image waitUntilDone:NO]; [self performSelector:@selector(showImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:YES]; // self.imageView.image = image; NSLog(@"---end---"); } //更新UI操作 -(void)showImage:(UIImage *)image { self.imageView.image = image; NSLog(@"UI----%@",[NSThread currentThread]); }
performSelectorOnMainThread:和performSelector:方法都可以
也可以直接用对象self.imageView调用performSelectorOnMainThread:方法,使用对象self.imageView的image属性的setImage:方法来实现(这样可以省略创建showImage方法)。
[self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];
开子线程下载图片,回到主线程刷新UI步骤
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。