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;
    }











  • 相关阅读:
    Django的路由系统
    Django框架简介
    域名与网站名的区别
    简单的链接样式-CSS
    用Javascript获取样式注意的地方
    null和undefined区别
    addLoadEvent(func)详解
    《Javascrip DOM 编程艺术》学习笔记-Chapter5
    某夜凌晨4点所感所悟——未来前端路
    win7-32bit-virtualbox安装问题及解决方式
  • 原文地址:https://www.cnblogs.com/zmloveworld/p/5185231.html
Copyright © 2011-2022 走看看