美文网首页iOS 开发 iOS开发
一些阅读笔记关于宏

一些阅读笔记关于宏

作者: 大灰灰iOS | 来源:发表于2015-03-23 22:04 被阅读312次

    阅读以下几篇文章有感

    http://tutuge.me/2015/03/11/Effective-Objective-C-%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0-Item-4-%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A1%AE%E5%AE%9A%E4%B9%89%E5%B8%B8%E9%87%8F/

    http://tutuge.me/2015/03/15/%E6%9C%89%E5%85%B3%E5%AE%8F%E5%AE%9A%E4%B9%89%E7%9A%84%E7%BB%8F%E9%AA%8C%E4%B8%8E%E6%8A%80%E5%B7%A7-%E7%AE%80%E5%8C%96%E4%BB%A3%E7%A0%81-%E5%A2%9E%E5%BC%BALog/

    http://onevcat.com/2014/01/black-magic-in-macro/

    Effective-Objective-C 第一、第二章

    首先写一些常量定义的时候,用宏并不是太好。

    而应该用如下的静态常量

     static const 类型 名称 = 值;
    

    可以用在方法内,或者.m里面

    对于NSNotification的统一定义这么写

    //xxxClass.h
    extern NSString * const xyzNotification;
    
    //xxxClass.m
    NSString * const xyzNotification = @"xyzNotification";
    

    写线程锁的时候

    static dispatch_once_t   onceToken;
        dispatch_once(&onceToken, ^{
            //code
        });
    

    dispatch_once_t必须是static的,否则报错。
    dispatch_once的第一个参数必须取onceToken的地址,就是要“&onceToken。”

    那么这时候可以用宏定义
    #define DISPATCH_ONCE_BLOCK(onceBlock) static dispatch_once_t onceToken; dispatch_once(&onceToken, onceBlock);
    
        DISPATCH_ONCE_BLOCK(^{
            //code
        })
    

    多线程

    //在Main线程上运行
    #define DISPATCH_ON_MAIN_THREAD(mainQueueBlock) dispatch_async(dispatch_get_main_queue(), mainQueueBlock);
    
    //在Global Queue上运行
    #define DISPATCH_ON_GLOBAL_QUEUE_HIGH(globalQueueBlocl) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), globalQueueBlocl);
    #define DISPATCH_ON_GLOBAL_QUEUE_DEFAULT(globalQueueBlocl) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), globalQueueBlocl);
    #define DISPATCH_ON_GLOBAL_QUEUE_LOW(globalQueueBlocl) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), globalQueueBlocl);
    #define DISPATCH_ON_GLOBAL_QUEUE_BACKGROUND(globalQueueBlocl) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), globalQueueBlocl);
    
    //主线程上
    DISPATCH_ON_MAIN_THREAD(^{
        //更新UI
    })
    
    //Global Queue 
    DISPATCH_ON_GLOBAL_QUEUE_DEFAULT(^{
        //异步耗时任务
    })
    

    所以工欲善其事,必先利其器,去改项目去了。

    简书已经弃用,欢迎移步我的小专栏:
    https://xiaozhuanlan.com/dahuihuiiOS

    相关文章

      网友评论

        本文标题:一些阅读笔记关于宏

        本文链接:https://www.haomeiwen.com/subject/wwdgxttx.html