zoukankan      html  css  js  c++  java
  • GCD自己做的一些简单总结



    GCD总结

    GCD  Grand Central Dispatch  牛逼的中枢调度器

    GCD中各种队列的执行效果


    想看线程  必须是异步函数  并且不是主队列

    注意:使用sync函数往当前串行队列添加任务,会卡住当前的串行队列
    同步函数 立即执行
    异步函数 稍后执行(所以不会阻塞)




    dispatch_barrier_async(queue, ^{
            NSLog(@"-----barrier----%@",[NSThread currentThread]);
        });

    barrier的作用  在前面的任务执行完再执行  而且他后面的任务等他执行完后才会执行
    这里的queue不能是在全局并发队列
    必须是自己creat的



    GCD快速迭代  同一时间快速遍历
    dispatch_apply(10, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t index) {
            NSLog(@"%zu--%@",index,[NSThread currentThread]);
            
        });


    通过GCD创建单例模式

    首先从写allocWithZone方法


    再创建一个shareInstance  单例类方法

    再讲copy方法从写一下

    为了便于利用我们可以单独定义一个.h类 创建一个只有宏的类




    // .h文件
    #define ZMSingletonH(name) + (instancetype)shared##name;

    // .m文件
    #define ZMSingletonM(name)
    static id _instance;
     
    + (instancetype)allocWithZone:(struct _NSZone *)zone
    {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            _instance = [super allocWithZone:zone];
        });
        return _instance;
    }
     
    + (instancetype)shared##name
    {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            _instance = [[self alloc] init];
        });
        return _instance;
    }
     
    - (id)copyWithZone:(NSZone *)zone
    {
        return _instance;
    }











  • 相关阅读:
    获取最外层View
    Activity的lanuchmode
    decorview that was originally added here or java.lang.IllegalArgumentException: View not attached to window manager
    Android开源项目
    Android屏幕适配
    android获取根视图
    Nginx 安装 和 特性介绍
    kubernetes Pod控制器
    kubernetes 资源清单定义入门
    kubernetes 应用快速入门
  • 原文地址:https://www.cnblogs.com/zmloveworld/p/5185231.html
Copyright © 2011-2022 走看看