为了避免界面在处理耗时的操作时卡死,比如读取网络数据,io,数据库读写等,我们会在另外一个线程中处理这些操作,然后通知主线程更新界面。
- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
- // 耗时的操作
- dispatch_async(dispatch_get_main_queue(), ^{
- // 更新界面
- });
- });
- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
- NSURL * url = [NSURL URLWithString:@"http://avatar.csdn.net/2/C/D/1_totogo2010.jpg"];
- NSData * data = [[NSData alloc]initWithContentsOfURL:url];
- UIImage *image = [[UIImage alloc]initWithData:data];
- if (data != nil) {
- dispatch_async(dispatch_get_main_queue(), ^{
- self.imageView.image = image;
- });
- }
- });
异步的核心概念就是一个新线程,一个消息回调通知。
- for (int i = 0 ; i < 10; i++) {
- dispatch_async(dispatch_get_global_queue(0, 0), ^{
- // 处理耗时操作的代码块...
- UIImage *img = [self getImgeWith:[urlArr objectForIndex:i]];
- //通知主线程刷新
- dispatch_async(dispatch_get_main_queue(), ^{
- //回调或者说是通知主线程刷新,
- [myImgV[i] setImage:img];
- });
-
- });