子线程更新UI?这种情况呢?
|Word count:276|Reading time:1min|Post View:
问题是:
今天研究到了一个有趣的问题,在这里先Mark一下。现在还是搞不懂!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| - (IBAction)touchButton:(id)sender { NSLog(@"--------"); dispatch_queue_t queue = dispatch_get_global_queue(0, 0); dispatch_async(queue, ^{
NSURL *url = [NSURL URLWithString:@"https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/logo_redBlue.png"]; NSData *data = [NSData dataWithContentsOfURL:url]; UIImage *image = [UIImage imageWithData:data]; NSLog(@"%@", image); NSLog(@"%@", [NSThread currentThread]);
dispatch_sync(queue, ^{ NSLog(@"----------_A"); self.imageView.image = image; NSLog(@"----------_B"); }); NSLog(@"设置图片完毕 %@", image); }); }
|
在显示完以下所有输出信息(说明此时已经下载完图片)后,图片需要几秒才会显示。

解决思路:A和B之间的self.imageView.image = image;
可能做了两件事:
- 逻辑设置(确定是占用了子线程)
- 渲染界面(UI更新只能通过主线程?)
主要问题在于子线程如何告知主线程更新UI,里面的细节暂时不知道。
有趣的是:
- 按了Button立刻按Home键再进入App,图片立刻显示!
- 使用
-performSelectorOnMainThread: withObject waitUntilDone:
可以使得图片立刻显示。因为调用了主线程执行?
MARK!