zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Java在控制台运行IDE工具编写的程序
    mysql数据库执行存储过程问题
    Java之正则表达式在字符串中查找中文
    java之endwith()方法以及正则表达式匹配中文
    工具资源 Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore
    5、概率图模型 Inference-Variable_Elimination
    4、概率图模型:Template Modles
    3、概率图模型:Local Structure in Markov Network
    2、概率图模型: Markov Random Fields
    1、概率图模型: Bayesian Networks
  • 原文地址:https://www.cnblogs.com/110-913-1025/p/7997790.html
Copyright © 2011-2022 走看看