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]);
});
}