线程5--GCD简介

/******************************************************/
 
 同步函数
 
 (1)并发队列:不会开线程
 
 (2)串行队列:不会开线程
 
 异步函数
 
 (1)并发队列:能开启N条线程
 
 (2)串行队列:开启1条线程

/*******************************************************/

/*****************用异步函数往并发队列中添加任务********************/
/* //可以创建多个子线程
    //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]);
*/
/*****************用异步函数往串行队列中添加任务*******************/
   //会开启子线程,但只会开启一个;
    //打印主线程
    NSLog(@"主线程----%@",[NSThread mainThread]);
    
    //创建串行队列
    dispatch_queue_t queue=dispatch_queue_create("name", NULL);    //第一个参数为串行队列的名称,是c语言的字符串
    //第二个参数为队列的属性,一般来说串行队列不需要赋值任何属性,所以通常传空值(NULL)
    
    //2.添加任务到队列中执行
    dispatch_async(queue, ^{
        NSLog(@"图片1----%@",[NSThread currentThread]);
        NSLog(@"图片2----%@",[NSThread currentThread]);
        NSLog(@"图片3----%@",[NSThread currentThread]);
    });
    //NSLog(@"主线程----%@",[NSThread mainThread]);
    //3.释放资源
    //    dispatch_release(queue);

 /*****************用同步函数往并发队列中添加任务*******************/
/*   //不会创建子线程;
    dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_sync(queue, ^{
        NSLog(@"image1---%@",[NSThread currentThread]);
        NSLog(@"image2---%@",[NSThread currentThread]);
        NSLog(@"image3---%@",[NSThread currentThread]);
        
    });
    NSLog(@"mainThread%@",[NSThread mainThread]);
*/
/*****************用同步函数往串行队列中添加任务*******************/
/*   //不会创建子线程;
    dispatch_queue_t queue=dispatch_queue_create("name", NULL);
    dispatch_sync(queue, ^{
        NSLog(@"image1%@",[NSThread currentThread]);
        NSLog(@"image2%@",[NSThread currentThread]);
        NSLog(@"image3%@",[NSThread currentThread]);
    });
    NSLog(@"mainThread%@",[NSThread mainThread]);*/
 /********************************************************/
    
原文地址:https://www.cnblogs.com/sunjianfei/p/5725048.html