GCD:比NSOperation还要底层的API,操作底层C API,效率高,使用起来也是最方便的,不需要管生命周期.
图片异步加载:
//先将异步下载图片的任务放到dispatch_get_global_queue全局共享并发队列中执行dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{
NSURL*url=[NSURLURLWithString:@"图片的URL"];
UIImage*image=[UIImageimageWithData:[NSDatadataWithContentsOfURL:url]];
// 下载完成后需要放在dispatch_get_main_queue回到主线程更新UI,显示图片
dispatch_async(dispatch_get_main_queue(),^{
self.imageView.image=image;
});
});
使用dispatch_after方法来延迟执行某项功能:
CGFloat time =3.0f;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time *NSEC_PER_SEC)),dispatch_get_main_queue(), ^{
//执行的方法
});
如下图,接口请求完数据后菊花效果(0.5秒消失)提示保存成功,
再经过0.7-0.5=0.2秒后返回上一个界面:
Paste_Image.png
创建队列、异步、同步任务添加到队列:
dispatch_queue_t queue = dispatch_queue_create("baidu", NULL);
dispatch_async(queue, ^{
NSLog(@"异步任务,当前线程为%@", [NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"同步任务,当前线程为%@", [NSThread currentThread]);
});
网友评论