---恢复内容开始---
直接上代码
一,异步函数往并发队列中添加任务
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
NSLog(@"下载图片。。。%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"下载图片2.。。%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"下载图片3.。。%@",[NSThread currentThread]);
});
NSLog(@"主线程。。。%@",[NSThread mainThread]);
二,异步函数往串行队列中添加任务
NSLog(@"%@",[NSThread mainThread]);
dispatch_queue_t queue = dispatch_queue_create("dusunan", NULL);
dispatch_async(queue, ^{
NSLog(@"下载图片1----%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"下载图片2----%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"下载图片3----%@",[NSThread currentThread]);
});
此种方法会开启线程,但是只会开启一个线程
三,用异步函数往并发队列中添加任务
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_sync(queue, ^{
NSLog(@"下载图片1 %@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"下载图片2 %@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"下载图片3 %@",[NSThread currentThread]);
});
四,同步函数往串行队列中添加任务
dispatch_queue_t queue = dispatch_queue_create("dusunan", NULL);
dispatch_sync(queue, ^{
NSLog(@"下载图片1 %@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"下载图片2 %@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"下载图片3 %@",[NSThread currentThread]);
});
五,应用
(1)一次性代码
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 18 { 19 if (_log==NO) { 20 NSLog(@"该行代码只执行一次"); 21 _log=YES; 22 } 23 }
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 26 { 27 static dispatch_once_t onceToken; 28 dispatch_once(&onceToken, ^{ 29 NSLog(@"该行代码只执行一次"); 30 }); 31 }
下面的代码可以取代上面的代码块
原文:http://www.cnblogs.com/adodo/p/5193421.html