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











posted @ 2016-02-08 21:10  听风观雨阁  阅读(219)  评论(0编辑  收藏  举报