美文网首页
define -- 宏定义的使用场景

define -- 宏定义的使用场景

作者: 337b94dc718f | 来源:发表于2019-02-17 16:02 被阅读0次

    1.NS_UNAVAILABLE_XX

    OS某个版本之后,方法、属性可用。在不支持的OS上运行时直接崩溃,提示unrecognized selector。

    - (NSString *)methodOnSpecificalVers NS_AVAILABLE_IOS(10_0);
    

    2.定义全局变量
    比如获取导航栏、状态栏高度,判断机型进行UI适配等。这里使用物理像素判断全面屏机型,惊奇的发现,XS MSX 和 XR物理尺寸不一致,但是logical resolution却一致,都是 375 * 896 point。

    #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
    #define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
    #define STATUSBAR_HEIGHT [[UIApplication sharedApplication] statusBarFrame].size.height
    #define NAVBAR_HEIGHT IPHONE_X ? 64 : 44
    #define  STATUS_NAV_HEIGHT STATUSBAR_HEIGHT + NAVBAR_HEIGHT
    #define IPHONE_X ([UIScreen mainScreen].nativeBounds.size.height == 2436.0 || [UIScreen mainScreen].nativeBounds.size.height == 1792.0 || [UIScreen mainScreen].nativeBounds.size.height == 2688.0)
     //
    

    3.方法

     //单例
    #define SINGLE_INSTANCE_OF(className)\
    + (instancetype)shared##className;
    
    #define SINGLE_INSTANCE_IMP_OF(className)\
    + (instancetype)shared##className {\
    static className *obj;\
    static dispatch_once_t onceToken;\
    dispatch_once(&onceToken, ^{\
        obj = [[className alloc] init];\
    });\
    return obj;\
    }
     //断言
    NSAssert(BOOL, @"");
    //主线程安全
    #define ASYN_MAIN(...) dispatch_async(dispatch_get_main_queue(), ^{__VA_ARGS__})
    #define ASYN_BLOCK_ON_MAIN(block) dispatch_async(dispatch_get_main_queue(), block)
    

    __VA_ARGS__(双下划线),表示多个变量
    ## 连接前后单词

    4.__weak , __strong
    为了解决block中的循环引用问题,需要用__weak,__strong修饰符重新定义变量。目前还是WS 与SS使用更方便些。

    //autoreleasepool模式, 用法 @aweakify(self)
    #define aweakify(obj) autoreleasepool{} __weak typeof(obj) weak_##obj = obj
    #define astrongify(obj) autoreleasepool{} __strong typeof(weak_self) self = weak_self
    
    //WS SS
    
    #define weakify(obj) __weak typeof(obj) weak_##obj = obj
    #define strongify(obj) __strong typeof(obj) strong_##obj = obj
    
    #define WS weakify(self)
    #define SS __strong typeof(weak_self) self = weak_self
    

    宏定义在预处理阶段进行替换,可通过Process查看预处理结果。

    Echo
    Sun Feb 17, 2019

    相关文章

      网友评论

          本文标题:define -- 宏定义的使用场景

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