• iOS开发之GCD总结


    直接贴出常用的函数,方便要用的时候直接使用。

    -------------     type 1 ----------------

    说明  :

    创建一个dispatch_group_t,每次网络请求前先dispatch_group_enter,请求回调后再dispatch_group_leave,对于enter和leave必须配合使用,有几次enter就要有几次leave,否则group会一直存在。当所有enter的group都leave后,会执行dispatch_group_notify的block

    dispatch_group_t downLoadGroup = dispatch_group_create();
            dispatch_group_enter(downLoadGroup);       
            dispatch_group_leave(downLoadGroup);      
            dispatch_group_notify(downLoadGroup, dispatch_get_main_queue(), ^{
                NSLog(@"回到主线程通知");
            });
    

      

    -------------     type 2 ----------------

    说明 :

    延迟方法

    double delayInSeconds = 3;
            dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
            dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
                NSLog(@"主线程中延迟方法执行回调");
            });
    

      

    -------------     type 3 ----------------

    说明 :

    等待之前的线程结束(会阻塞线程,慎用)

    dispatch_group_t waitGroup = dispatch_group_create();
            dispatch_group_wait(waitGroup, DISPATCH_TIME_FOREVER);
    

      

    -------------     type 4 ----------------

    说明 :

    开启异步线程 -- 

    会创建group  在所有线程执行完成之后会执行notify block   注意:notify要放在最后。

    dispatch_group_t group = dispatch_group_create();
        dispatch_queue_t queue = dispatch_queue_create("com.gcd-group.www", DISPATCH_QUEUE_CONCURRENT);   
        dispatch_group_async(group, queue, ^{
            for (int i = 0; i < 1000000000; i++) {
                if (i == 999999999) {
                    NSLog(@"11111111");
                }
            }
        });
        
        dispatch_group_async(group, queue, ^{
            NSLog(@"22222222");
        });
        
        dispatch_group_async(group, queue, ^{
            NSLog(@"33333333");
        });
        
        dispatch_group_notify(group, queue, ^{
            NSLog(@"done");
        });

    -------------     type 5 ----------------

    说明 :

    开启异步线程  

    dispatch_queue_t concurrentDiapatchQueue=dispatch_queue_create("com.test.queue", DISPATCH_QUEUE_CONCURRENT);
        dispatch_async(concurrentDiapatchQueue, ^{
            NSLog(@"1");
        });
        dispatch_async(concurrentDiapatchQueue, ^{
            sleep(2);
            NSLog(@"2");
        });
        dispatch_async(concurrentDiapatchQueue, ^{
            sleep(1);
            NSLog(@"3");
        });

    -------------     type 6 ----------------

    说明 :

    开启同步线程

        dispatch_queue_t serialDiapatchQueue=dispatch_queue_create("com.test.queue", DISPATCH_QUEUE_SERIAL);
     
        dispatch_async(serialDiapatchQueue, ^{
            NSLog(@"1");
        });
        
        dispatch_async(serialDiapatchQueue, ^{
            NSLog(@"2");
            sleep(2);
            NSLog(@"2-------");
        });
        
        dispatch_async(serialDiapatchQueue, ^{
            NSLog(@"3");
            sleep(2);
            NSLog(@"3--------");
        });
    

      

    -------------     type 7 ----------------

    说明 :

    GCD的栅栏方法 dispatch_barrier_async

    dispatch_queue_t queue = dispatch_queue_create("12312312", DISPATCH_QUEUE_CONCURRENT);
        
        dispatch_async(queue, ^{
            NSLog(@"----1---");
        });
        dispatch_async(queue, ^{
            NSLog(@"----2----");
        });
        
        dispatch_barrier_async(queue, ^{
            NSLog(@"----barrier----");
        });
        
        dispatch_async(queue, ^{
            NSLog(@"----3-----");
        });
        dispatch_async(queue, ^{
            NSLog(@"----4-----");
        });
        dispatch_async(queue, ^{
            NSLog(@"----5-----");
        });
        dispatch_async(queue, ^{
            NSLog(@"----6-----");
        });

    多线程的链接:http://www.cocoachina.com/ios/20170707/19769.html

  • 相关阅读:
    动态规划股票购入卖出
    输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
    java模拟死锁
    从上往下打印出二叉树的每个节点,同层节点从左至右打印。
    java 多线程
    把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
    目录操作
    获取文字高度以及根据label内容来调整label的高度
    视图抖动动画
    带有背景显示加载中的activity
  • 原文地址:https://www.cnblogs.com/110-913-1025/p/7997790.html
Copyright © 2020-2023  润新知