• GCD


    任务

    同步(阻塞当前线程)与异步(不会)

    队列

    串行与并行

    //全局并发的队列 参数1:优先级

    dispatch_get_global_queue(0,0)

    // 如果我们自己创建穿行队列的话 不会另外开辟线程 只在同一条线程中执行 从而控制任务的先后执行顺序

    dispatch_queue_t myQueue = dispatch_queue_create("name",NULL);// 串行队列

    dispatch_queue_t myQueue = dispatch_queue_create("name",DISPATCH_QUEUE_CONCURRENT);// 并行队列

    dispatch_async(dispatch_get_global_queue(0,0),^{、

      //执行耗时操作(db image)

      [NSThread sleepForTimeInterval:3];

      dispatch_async(dispatch_get_main_queue(),^{

      //回到主线程刷新UI

      });

    });

    需求 多个任务异步处理之后 统一的回掉通知处理其他任务(维修详情界面的数据请求与UI刷新) 可用到 dispatch_group

    dispatch_group_t groupQueue = dispatch_group_create();

    dispatch_group_async(group, queue, ^{

     1 

      如果是异步操作的需要放到group中

      dispatch_group_enter(groupQueue);

      [self request:^{

      dispatch_group_leavc(groupQueue);

      }];

    });

    dispatch_group_async(group, queue, ^{

     2

    });

    dispatch_group_async(group, queue, ^{

     3 

    });

    //统一的回掉通知

    dispatch_group_notify(group, queue, ^{

      123任务都执行完的回掉通知 在异步线程中

    });

    GCD实现单例

    static dispatch_once_t onceToken;

    static Single *single = nil;

    dispatch_once(&onceToken, ^{

      single = [[Single alloc] init];

    });

    return single;

    延迟加载

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_i)(2*NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

      避开动画以及业务等

      一定避免执行已经释放的变量

      

    });

  • 相关阅读:
    Android学习笔记(四十):Preference的使用
    java反射中Method类invoke方法的使用方法
    accept函数
    C++教程之lambda表达式一
    《windows核心编程系列》十八谈谈windows钩子
    STL学习小结
    RS-232协议和RS-485协议
    选择排序
    在asp.net mvc中使用PartialView返回部分HTML段
    uva 10560
  • 原文地址:https://www.cnblogs.com/dlwj/p/6551307.html
Copyright © 2020-2023  润新知