GCD初步认识
2015-04-29 00:51
176 查看
//(1)用异步函数往并发队列中添加任务, //总结:同时开启三个子线程 - (void)test1 { //1.获得全局的并发队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //2.添加任务到队列中,就可以执行任务 //异步函数:具备开启新线程的能力 dispatch_async(queue, ^{ NSLog(@"下载图片1----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"下载图片2----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"下载图片3----%@",[NSThread currentThread]); }); //打印主线程 NSLog(@"主线程----%@",[NSThread mainThread]); }
//(2)用异步函数往串行队列中添加任务 //总结:会开启线程,但是只开启一个线程 - (void)test2 { //打印主线程 NSLog(@"主线程----%@",[NSThread mainThread]); //创建串行队列 dispatch_queue_t queue= dispatch_queue_create("tqh", NULL); //第一个参数为串行队列的名称,是c语言的字符串 //第二个参数为队列的属性,一般来说串行队列不需要赋值任何属性,所以通常传空值(NULL) //2.添加任务到队列中执行 dispatch_async(queue, ^{ NSLog(@"下载图片1----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"下载图片2----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"下载图片3----%@",[NSThread currentThread]); }); //3.释放资源 // dispatch_release(queue); }
//3)用同步函数往并发队列中添加任务 //总结:不会开启新的线程,并发队列失去了并发的功能 - (void)test3 { //打印主线程 NSLog(@"主线程----%@",[NSThread mainThread]); //创建串行队列 dispatch_queue_t queue= dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //2.添加任务到队列中执行 dispatch_sync(queue, ^{ NSLog(@"下载图片1----%@",[NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"下载图片2----%@",[NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"下载图片3----%@",[NSThread currentThread]); }); }
//(4)用同步函数往串行队列中添加任务 //总结:不会开启新的线程 - (void)test4 { NSLog(@"用同步函数往串行队列中添加任务"); //打印主线程 NSLog(@"主线程----%@",[NSThread mainThread]); //创建串行队列 dispatch_queue_t queue= dispatch_queue_create("tqh", NULL); //2.添加任务到队列中执行 dispatch_sync(queue, ^{ NSLog(@"下载图片1----%@",[NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"下载图片2----%@",[NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"下载图片3----%@",[NSThread currentThread]); }); }
/** 补充:队列名称的作用: 将来调试的时候,可以看得出任务是在哪个队列中执行的。 说明:同步函数不具备开启线程的能力,无论是什么队列都不会开启线程;异步函数具备开启线程的能力,开启几条线程由队列决定(串行队列只会开启一条新的线程,并发队列会开启多条线程)。 同步函数 (1)并发队列:不会开线程 (2)串行队列:不会开线程 异步函数 (1)并发队列:能开启N条线程 (2)串行队列:开启1条线程 补充: 凡是函数中,各种函数名中带有create\copy\new\retain等字眼,都需要在不需要使用这个数据的时候进行release。 GCD的数据类型在ARC的环境下不需要再做release。 CF(core Foundation)的数据类型在ARC环境下还是需要做release。 异步函数具备开线程的能力,但不一定会开线程 */
相关文章推荐
- 初步认识 "云计算" 概念
- mysql初步认识,了解mysql中的基本数据类型
- graphql学习(二)Restful API的初步认识
- 初步认识和了解Git/Github
- [yii]初步认识yii 建立第一个 Yii 应用
- 初步认识 TCP IP HTTP HTTPS SOCKET
- Orapwd 初步认识
- 001.【笔记】android socket 初步认识
- 初步认识MDL
- Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值
- PHP框架认识初步
- 闲谈DWR1 —DWR的初步认识
- 浅谈自我对git的初步认识
- android进程的初步认识
- Ajax初步认识:
- 初步认识Shiro
- 初步认识JWT
- hdu1695GCD(莫比乌斯反演初步)
- 对架构的初步认识和理解
- iBatis初步认识与使用