常用GCD梳理(-)
来源:互联网 发布:java构造函数未定义 编辑:程序博客网 时间:2024/06/10 16:19
一:异步、同步
1.dispatch_async(dispatch_queue_t queue, dispatch_block_t block);
异步执行
例如: 会立即返回,同时把block里面加载的东西放在后台执行。 执行完毕之后 在main(主线程)里面刷新UI页面。
// dispatch_queue_t global = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);// dispatch_queue_t mainQ = dispatch_get_main_queue(); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSURL *url = [NSURL URLWithString:@"http://www.ytxww.com/upload/image/201203/20120309100442708165.jpg"]; _img = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]]; _img = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]]; 在main(主线程)里面刷新UI页面
dispatch_async(dispatch_get_main_queue(), ^{ _imgv.image = _img; }); });
同样:
2.dispatch_sync(dispatch_queue_t queue>,(void)block)为同步执行,和异步不同的是要执行完block块之后才返回,然后进行下面的操作。
二。dispatch_apply
按照一定次数(size_t iterations)循环,队列本身决定同步或者异步执行
dispatch_apply(size_t iterations,dispatch_queue_t queue,void (^block)(size_t));
因为是全部执行完之后才返回,然后继续执行下面的操作,所以,如果在dispatch_async(异步)里面添加dispatch_apply可以出现dispatch_sync(同步)的效果。如下:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ dispatch_apply(5, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t index) { NSLog(@"%zu",index); }); NSLog(@"会执行五次apply之后,才执行此次打印"); });
三。dispatch_after
延迟执行, 延迟5秒执行打印
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)),dispatch_get_main_queue(), ^{
NSLog(@"after do");
});
四。
1.dispatch_barrier_async
dispatch_barrier_async(dispatch_queue_t queue,dispatch_block_t block);
作用如其名-->阻碍。如下:不管barrier block里面需要多久,3,4都会在barrier执行完之后执行。
dispatch_queue_t queue = dispatch_queue_create("myqueue", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^(){ NSLog(@"1"); }); dispatch_async(queue, ^(){ NSLog(@"2"); }); dispatch_barrier_async(queue, ^(){ NSLog(@"barrier"); dispatch_apply(10, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t index) { NSLog(@"......"); }); }); dispatch_async(queue, ^(){ NSLog(@"3"); }); dispatch_async(queue, ^(){ NSLog(@"dispatch-4"); });
和dispatch_barrier_async,大同小异,只是用在同步或者异步的区别。
- 常用GCD梳理(-)
- 常用GCD
- 多线程学习11-GCD常用函数
- GCD的其他(不常用)方法
- plsql知识梳理-常用函数
- NSArray&NSMutableArray常用操作梳理
- NSString&NSMutableString常用操作梳理
- NSDictionary&NSMutableDictionary常用操作梳理
- NSDictionary&NSMutableDictionary常用操作梳理
- NSArray&NSMutableArray常用操作梳理
- NSArray&NSMutableArray常用操作梳理
- 常用R包内容梳理
- 常用的 js 代码梳理
- MYSQL常用操作 知识梳理
- 【Java】常用集合类型梳理
- GCD常用函数总结
- GCD常用方法
- IOS GCD 常用
- java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com
- 关键路径算法
- AMS (2): AMS 如何进程管理?
- js 有框架页面跳转(target)
- Json解析工具Jackson(简单应用)
- 常用GCD梳理(-)
- 真实解决NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9843)
- Java 动态代理学习理解
- Python开发实例:TPYBoard开发板DIY红绿灯
- Java:java.lang.OutOfMemoryError: GC overhead limit exceeded解决办法
- NSArray应该用strong修饰还是copy修饰
- ssm遇到的第一个错误
- hjr教程-C++(一):面向对象类的写法
- c#.net 获取时间日期年月日时分秒格式