关于GCD的一些函数
来源:互联网 发布:非诚勿扰程序员专场 编辑:程序博客网 时间:2024/05/22 15:13
1.一次性代码(多用于单例)
1>只执行一次,创建了到销毁都只会执行一次
static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSLog(@"once"); });
2.延迟执行
1>关于延迟执行,有三种方式可以实现
a.performSelector
b.定时器
c.
gcd
// 1.延迟执行的第一种方法 [self performSelector:@selector(task) withObject:nil afterDelay:2.0]; // 2.延迟执行的第二种方法 [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(task) userInfo:nil repeats:YES];// 3.延迟执行的第三种方法 /** 第一个参数:DISPATCH_TIME_NOW 从现在开始计算事件 第二个参数:延迟的时间 GCD时间单位:那秒 第叁个参数:队列 */ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ NSLog(@"GCD ---- %@",[NSThread currentThread]); });
3.栅栏函数
作用:只有当栅栏函数执行完毕后才能执行后面的函数
需求:使用栅栏函数规定线程执行顺序
注意:栅栏函数不能使用全局并发队列(否则没有意义)
dispatch_queue_t queue = dispatch_queue_create("download", DISPATCH_QUEUE_CONCURRENT); //1.异步函数 dispatch_async(queue, ^{ for (NSInteger i =0 ; i < 5 ; i++){ NSLog(@"task1 -- %zd -- %@",i,[NSThread currentThread]); } }); dispatch_async(queue, ^{ for (NSInteger i =0 ; i < 5 ; i++){NSLog(@"task2 -- %zd -- %@",i,[NSThread currentThread]);
} });
dispatch_barrier_async(queue, ^{
NSLog(@"+++++++++++++++");
});
dispatch_async(queue, ^{ for (NSInteger i =0 ; i < 5 ; i++){
NSLog(@"task3 -- %zd -- %@",i,[NSThread currentThread]);
} });
dispatch_barrier_async(queue, ^{
NSLog(@"+++++++++++++++");
});
dispatch_async(queue, ^{ for (NSInteger i =0 ; i < 5 ; i++){
NSLog(@"task4 -- %zd -- %@",i,[NSThread currentThread]);
} });
阅读全文
0 0
- 关于GCD的一些函数
- 关于GCD的一些用法
- 关于GCD的一些总结
- 关于GCD的一些认识
- 关于lcm,gcd的一些性质
- 关于GCD开发的一些事儿
- 关于GCD开发的一些事儿
- 关于GCD开发的一些事儿
- 关于GCD的一些宏定义
- 关于GCD开发的一些事儿
- 关于求最大公约数gcd的一些证明
- 关于GCD的一些技巧笔记
- 关于IOS中GCD,NSThread和NSOperation的一些总结
- 关于GCD的一些介绍及相关使用
- 20160823关于GCD与NSOperation的一些比较
- GCD的一些东西
- GCD的一些用法
- GCD的一些原理
- jquery 实现表格行的上下移动和置顶
- Android Studio 插件汇总
- java对象和对象引用
- Tensorflow06-可视化
- 微信小程序链接
- 关于GCD的一些函数
- 数据结构-哈希
- 用powershell
- yii 后台模版 adminLTE 以及后台用户分离
- 1209:梯形
- OpenCV imgproc组件之 图像处理
- Spring源码学习之IoC
- 我们的算法少女
- lambda