为了避免界面在处理耗时的操作时卡死,比如读取网络数据,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.youkuaiyun.com/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];
-
});
-
- });