GCD常用方法
来源:互联网 发布:python 对数函数ln 编辑:程序博客网 时间:2024/05/08 20:00
/*—————————————————————————————————————————————————GCD常用方法———————————————————————————————————————————————————————*/
/**
* dispatch_async(放在执行地方,执行代码)
*
* dispatch_get_main_queue()放在主线程执行
*
* dispatch_get_global_queue(执行级别, 0)放在后台执行
*
* DISPATCH_QUEUE_PRIORITY_HIGH 2 最高级别
* DISPATCH_QUEUE_PRIORITY_DEFAULT 0 默认级别
* DISPATCH_QUEUE_PRIORITY_LOW (-2) 最低级别
* DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN (后台优先队列调度_ _ _背景)没有试过
*
*
*/
dispatch_async(dispatch_get_global_queue(0,0), ^{
for (int i =0; i<10; i++) {
NSLog(@"123");
}
NSLog(@"处理耗时方法");
dispatch_async(dispatch_get_main_queue(), ^{
//回调或者说是通知主线程刷新,
//确保上面后台执行代码完成
});
* dispatch_async(放在执行地方,执行代码)
*
* dispatch_get_main_queue()放在主线程执行
*
* dispatch_get_global_queue(执行级别, 0)放在后台执行
*
* DISPATCH_QUEUE_PRIORITY_HIGH 2 最高级别
* DISPATCH_QUEUE_PRIORITY_DEFAULT 0 默认级别
* DISPATCH_QUEUE_PRIORITY_LOW (-2) 最低级别
* DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN (后台优先队列调度_ _ _背景)没有试过
*
*
*/
dispatch_async(dispatch_get_global_queue(0,0), ^{
for (int i =0; i<10; i++) {
NSLog(@"123");
}
NSLog(@"处理耗时方法");
dispatch_async(dispatch_get_main_queue(), ^{
//回调或者说是通知主线程刷新,
//确保上面后台执行代码完成
});
});
/*—————————————————————————————————————————————————GCDl列队———————————————————————————————————————————————————————*/
/**
* dispatch_group_t 创建列队
*
* dispatch_group_notify 列队结尾 最后执行
*
*/
dispatch_group_tgroup = dispatch_group_create();
dispatch_group_async(group,dispatch_get_global_queue(0,0), ^{
NSLog(@"执行1");
});
dispatch_group_async(group,dispatch_get_global_queue(0,0), ^{
// 并行执行的线程二
NSLog(@"执行2");
});
dispatch_group_notify(group,dispatch_get_main_queue(), ^{
// 汇总结果
// 得到线程一和二的结果
NSLog(@"完成");
* dispatch_group_t 创建列队
*
* dispatch_group_notify 列队结尾 最后执行
*
*/
dispatch_group_tgroup = dispatch_group_create();
dispatch_group_async(group,dispatch_get_global_queue(0,0), ^{
NSLog(@"执行1");
});
dispatch_group_async(group,dispatch_get_global_queue(0,0), ^{
// 并行执行的线程二
NSLog(@"执行2");
});
dispatch_group_notify(group,dispatch_get_main_queue(), ^{
// 汇总结果
// 得到线程一和二的结果
NSLog(@"完成");
});
/*—————————————————————————————————————————————————定时器———————————————————————————————————————————————————————*/
// 方法一.
__blockNSIntegercount = sender.tag;
// 获得队列
dispatch_queue_tqueue = dispatch_get_main_queue();
// 创建一个定时器(dispatch_source_t本质还是个OC对象)
dispatch_source_ttimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,0,0, queue);
// 获得队列
dispatch_queue_tqueue = dispatch_get_main_queue();
// 创建一个定时器(dispatch_source_t本质还是个OC对象)
dispatch_source_ttimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,0,0, queue);
// 设置定时器的各种属性(几时开始任务,每隔多长时间执行一次)
// GCD的时间参数,一般是纳秒(1秒== 10的9次方纳秒)
// 何时开始执行第一个任务
// dispatch_time(DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC)比当前时间晚3秒
// 何时开始执行第一个任务
// dispatch_time(DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC)比当前时间晚3秒
dispatch_time_t start =dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0* NSEC_PER_SEC));
// 定时器时间
uint64_t interval = (uint64_t)(1.0* NSEC_PER_SEC);
dispatch_source_set_timer(timer, start, interval,0);
// 设置回调
dispatch_source_set_event_handler(timer, ^{
NSLog(@"------------%@", [NSThreadcurrentThread]);
NSLog(@"%ld",(long)count);
// count++;
dispatch_source_set_timer(timer, start, interval,0);
// 设置回调
dispatch_source_set_event_handler(timer, ^{
NSLog(@"------------%@", [NSThreadcurrentThread]);
NSLog(@"%ld",(long)count);
// count++;
if (count == 0) {
// 取消定时器
_btn.tag= 1;
}else{
dispatch_cancel(timer);
}
});
// 启动定时器
_btn.tag= 1;
}else{
dispatch_cancel(timer);
}
});
// 启动定时器
dispatch_resume(timer);
// 方法二.(释放方法不同dispatch_source_set_cancel_handler原始方法(可以继续调用相关方法) dispatch_cancel简单方法(不可以调用其他方法))
__blockNSIntegercount = sender.tag;
dispatch_source_ttimer=dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,0,0,dispatch_get_main_queue());
dispatch_time_tstart = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0* NSEC_PER_SEC));
// 定时器时间
uint64_tinterval = (uint64_t)(5.0* NSEC_PER_SEC);
//最后一个参数几秒收执行定时器
dispatch_source_set_timer(timer, start, interval,0);
// 设置回调
dispatch_source_set_event_handler(timer, ^{
NSLog(@"wakeup");
if (count == 0) {
// 取消定时器
_btn.tag= 1;
}else{
dispatch_source_cancel(timer);
dispatch_source_ttimer=dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,0,0,dispatch_get_main_queue());
dispatch_time_tstart = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0* NSEC_PER_SEC));
// 定时器时间
uint64_tinterval = (uint64_t)(5.0* NSEC_PER_SEC);
//最后一个参数几秒收执行定时器
dispatch_source_set_timer(timer, start, interval,0);
// 设置回调
dispatch_source_set_event_handler(timer, ^{
NSLog(@"wakeup");
if (count == 0) {
// 取消定时器
_btn.tag= 1;
}else{
dispatch_source_cancel(timer);
}
});
dispatch_source_set_cancel_handler(timer, ^{
NSLog(@"cancel");
});
//启动
dispatch_source_set_cancel_handler(timer, ^{
NSLog(@"cancel");
});
//启动
dispatch_resume(timer);
/*—————————————————————————————————————————————————延时执行和自定义执行———————————————————————————————————————————————————————*/
/**
* GCD几分钟后执行
*
* @param DISPATCH_TIME_NOW 现在执行
* @param int64_t 秒
*
*/
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.1* NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0), ^{
NSLog(@"1.1秒后执行");
});
// 自定义方法
dispatch_queue_turls_queue = dispatch_queue_create("blog.devtang.com",NULL);
dispatch_async(urls_queue, ^{
// your code
NSLog(@"自定义");
* GCD几分钟后执行
*
* @param DISPATCH_TIME_NOW 现在执行
* @param int64_t 秒
*
*/
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.1* NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0), ^{
NSLog(@"1.1秒后执行");
});
// 自定义方法
dispatch_queue_turls_queue = dispatch_queue_create("blog.devtang.com",NULL);
dispatch_async(urls_queue, ^{
// your code
NSLog(@"自定义");
});
0 0
- GCD常用方法
- GCD常用方法
- 66 GCD常用方法
- GCD的常用方法
- iOS GCD常用方法
- GCD的常用方法
- GCD常用方法
- GCD常用方法
- GCD 常用方法dispatch_async
- iOS GCD常用方法总结
- GCD的常用方法总结
- [IOS 开发] GCD常用方法
- GCD 常用的几个方法
- [Swift 开发] GCD常用方法
- iOS GCD集汇(三)GCD常用方法总结
- 多线程的常用方法及GCD
- Swift 3.0中GCD的常用方法
- objc.io 2.3 GCD常用方法 (转)
- 诚实无价
- iOS Provisioning Profile(Certificate)与Code Signing详解
- mt.exe : general error c101008a: Failed to save the updated manifest to the file
- Spring-Mybatis分页--PageHelper
- 每秒处理10万订单乐视集团支付架构读后感
- GCD常用方法
- Hash小应用
- Linux装载配置SVN
- HIbernate如何设置主键生成器
- Android HTML.fromHtml解析图片标签
- codeforces 672C Recycling Bottles (枚举+贪心)
- 编译原理
- C语言fgets读取整个文本文件的内容
- collections.defaultdict