IOS学习 GCD 延时执行三种方法 并行/串行/主队列综合练习 队列组 shift+command+o快速查找
来源:互联网 发布:美国钻井平台数据最新 编辑:程序博客网 时间:2024/06/04 04:36
http://www.cnblogs.com/pure/archive/2013/03/31/2977420.html
http://www.cocoachina.com/industry/20140428/8248.html
http://blog.csdn.net/samuelltk/article/details/9452203/
按shift+command+o快速查找
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[selfdemo];
}
//延时执行
-(void)demo{
//方法1 timer
// NSTimer *timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(task) userInfo:nil repeats:YES];
// [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
//方法2
[selfperformSelector:@selector(task)withObject:nilafterDelay:3];
//方法3
/*参数1:延时时间 dispatch_time生成时间 纳秒为计时单位 精度高
*参数2:队列
*参数3:任务
*异步执行 */
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1*NSEC_PER_SEC)),dispatch_get_main_queue(), ^{
NSLog(@"task");
});
NSLog(@"over");
}
-(void)task{
NSLog(@"task");
}
//模拟下载任务
/*1、下载 L01.zip
*2、下载 L02.zip
*3、通知UI:下载完成
1、2在3之前执行
*/
-(void)demo1{
//串行,异步顺序下载
dispatch_queue_t serialQueue =dispatch_queue_create("serialQueue",DISPATCH_QUEUE_SERIAL);
dispatch_async(serialQueue, ^{
[NSThreadsleepForTimeInterval:arc4random_uniform(5)];//5秒内的随机时间
dispatch_async(serialQueue, ^{
NSLog(@"%@下载 L01.zip",[NSThreadcurrentThread]);
});
[NSThreadsleepForTimeInterval:arc4random_uniform(5)];//5秒内的随机时间
dispatch_async(serialQueue, ^{
NSLog(@"%@下载 L02.zip",[NSThreadcurrentThread]);
});
dispatch_async(serialQueue, ^{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"%@下载完成",[NSThreadcurrentThread]);
});
});
});
}
-(void)demo2{
//并行异步 "shift+command+o"快速查找
dispatch_queue_t concurrentQueue =dispatch_queue_create("concurrentQueue",DISPATCH_QUEUE_CONCURRENT);
dispatch_async(concurrentQueue, ^{
[NSThreadsleepForTimeInterval:arc4random_uniform(5)];//5秒内的随机时间
//并行同步顺序下载
dispatch_sync(concurrentQueue, ^{
NSLog(@"%@下载 L01.zip",[NSThreadcurrentThread]);
});
[NSThreadsleepForTimeInterval:arc4random_uniform(5)];//5秒内的随机时间
dispatch_sync(concurrentQueue, ^{
NSLog(@"%@下载 L02.zip",[NSThreadcurrentThread]);
});
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"%@下载完成",[NSThreadcurrentThread]);
});
});
}
//任务1、2在子线程上先顺序执行后,任务3、4在主线程上执行,最后任务5、6、7在子线程上并发无序执行
-(void)demo3{
dispatch_queue_t serialQueue =dispatch_queue_create("serialQueue",DISPATCH_QUEUE_SERIAL);
dispatch_queue_t concurrentQueue =dispatch_queue_create("concurrentQueue",DISPATCH_QUEUE_CONCURRENT);
dispatch_async(concurrentQueue, ^{
dispatch_sync(serialQueue, ^{
NSLog(@"%@执行任务1",[NSThreadcurrentThread]);
});
dispatch_sync(serialQueue, ^{
NSLog(@"%@执行任务2",[NSThreadcurrentThread]);
});
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"%@执行任务3",[NSThreadcurrentThread]);
});
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"%@执行任务4",[NSThreadcurrentThread]);
});
dispatch_async(concurrentQueue, ^{
dispatch_async(concurrentQueue, ^{
NSLog(@"%@执行任务5",[NSThreadcurrentThread]);
});
dispatch_async(concurrentQueue, ^{
NSLog(@"%@执行任务6",[NSThreadcurrentThread]);
});
dispatch_async(concurrentQueue, ^{
NSLog(@"%@执行任务7",[NSThreadcurrentThread]);
});
});
});
}
//队列组
-(void)demo4{
NSLog(@"begin");
//创建队列组
dispatch_group_t group =dispatch_group_create();
//开启异步任务
dispatch_group_async(group,dispatch_get_global_queue(0,0), ^{
//模拟网络卡
[NSThreadsleepForTimeInterval:arc4random_uniform(5)];//休眠5秒内随机时间
NSLog(@"%@下载 L01.zip",[NSThreadcurrentThread]);
});
dispatch_group_async(group,dispatch_get_global_queue(0,0), ^{
//模拟网络卡
[NSThreadsleepForTimeInterval:arc4random_uniform(5)];//休眠5秒内随机时间
NSLog(@"%@下载 L02.zip",[NSThreadcurrentThread]);
});
dispatch_group_notify(group,dispatch_get_global_queue(0,0), ^{
NSLog(@"%@下载完成",[NSThreadcurrentThread]);
});
}
-(void)demo5{
/* dispatch_group_async(dispatch_group_t group, dispatch_queue_t queue, dispatch_block_t block)
{
dispatch_retain(group);
dispatch_group_enter(group);
dispatch_async(queue, ^{
block();
dispatch_group_leave(group);
dispatch_release(group);
}); */
dispatch_group_t group =dispatch_group_create();
dispatch_group_enter(group);
dispatch_group_async(group,dispatch_get_global_queue(0,0), ^{
//模拟网络卡
[NSThreadsleepForTimeInterval:arc4random_uniform(5)];//休眠5秒内随机时间
NSLog(@"%@下载 L01.zip",[NSThreadcurrentThread]);
dispatch_group_leave(group);
});
dispatch_group_enter(group);
dispatch_group_async(group,dispatch_get_global_queue(0,0), ^{
//模拟网络卡
[NSThreadsleepForTimeInterval:arc4random_uniform(5)];//休眠5秒内随机时间
NSLog(@"%@下载 L02.zip",[NSThreadcurrentThread]);
dispatch_group_leave(group);
});
dispatch_group_notify(group,dispatch_get_global_queue(0,0), ^{
NSLog(@"%@下载完成",[NSThreadcurrentThread]);
});
}
- IOS学习 GCD 延时执行三种方法 并行/串行/主队列综合练习 队列组 shift+command+o快速查找
- iOS学习笔记74-IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别附代码
- GCD 主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别
- IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别
- ios-day19-02(GCD介绍。串行队列、并行队列、全局队列、主队列、同步任务、异步任务)
- iOS GCD/主队列/并行队列/全局队列/串行队列/同步任务/异步任务区别 含代码
- GCD介绍。串行队列、并行队列、全局队列、主队列、同步任务、异步任务
- GCD-同步,异步分别在串行队列,并发队列,主队列下的执行方式
- GCD 串行队列,并发队列和主队列的整理
- GCD 串行队列,并发队列和主队列的整理
- iOS详解 GCD 串行队列并行队列
- GCD主队列、全局队列
- iOS学习笔记-106.多线程05——CGD同步、异步函数和并行、串行、主队列示例
- iOS 多线程编程<三、GCD主队列相关>
- GCD全局队列与主队列
- GCD主队列死锁和全局队列
- GCD之主队列、全局并发队列、以及同步任务的执行
- ios多线程操作(六)—— GCD全局队列与主队列
- C/C++ 调用 Python(实例)
- 几种常见的货币制度简介
- html学习笔记3
- Git SVN 区别
- C++实验2-计算标准体重
- IOS学习 GCD 延时执行三种方法 并行/串行/主队列综合练习 队列组 shift+command+o快速查找
- Cannot create __weak reference in file using manual refrence counting.
- 文章标队和栈的一些区别
- Android四大组件
- apache kylin的二次开发
- 一步步优化JVM一:概述、方法及需求
- [渗透测试]扫目录,Sqlmap利用均超时,利用dirb扫描
- Socket编程-UdpClient的使用
- 单词统计、翻译、生成doc