美文网首页
宏定义和宏方法

宏定义和宏方法

作者: iOS收藏家 | 来源:发表于2016-05-25 11:31 被阅读2364次

宏定义和宏方法

定义机型

#define is_iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)

#define is_iPhone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)

#define is_iPhone6P ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)

定义手机系统型号

#define kOSVersion [[UIDevice currentDevice].systemVersion floatValue]
#define kOS_iOS7 (OSVersion >= 7)
#define kOS_iOS8 (OSVersion >= 8)   
#define kOS_iOS9 (OSVersion >= 9)

宏定义屏幕宽度和高度

#define KScreenSize    [UIScreen mainScreen].bounds.size    
#define KScreenHeight  ([[UIScreen mainScreen] bounds].size.height)
#define KScreenWidth   ([[UIScreen mainScreen] bounds].size.width)

定义打印的东西

#define DLog(fmt, ...) NSLog((@"[文件名:%s]\n" "[函数名:%s]\n" "[行号:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);

通过RGB获得一个颜色

static inline UIColor * getBackGoundColor(CGFloat r,CGFloat g,CGFloat b,CGFloat alpha){

return [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:alpha];

}

验证手机号

static inline bool predicateIsMobilePhone(NSString * mobilePhone){

NSString * validateContent = @"1[3|5|7|8|4|][0-9]{9}";

NSPredicate *validateTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", validateContent];

return [validateTest evaluateWithObject:mobilePhone];

}

比较大小和取绝对值

#define MIN(A,B)    ((A) < (B) ? (A) : (B))

#define MAX(A,B)    ((A) > (B) ? (A) : (B))

#define ABS(A)  ((A) < 0 ? (-(A)) : (A))

隐藏方法警告的方法

#define SuppressPerformSelectorLeakWarning(Stuff) \
do { \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
Stuff; \
_Pragma("clang diagnostic pop") \
} while (0)

添加观察者的宏定义方法

    #define REGISTER_SELECTOR(sel, notif_name)                  \
    if([obj respondsToSelector:sel])                            \
        [[NSNotificationCenter defaultCenter]   addObserver:obj \
                                                selector:sel    \
                                                name:notif_name \
                                                object:nil      \
        ];  

验证是不是表情
#define kChat_String_EmojiRegex @"\\[[a-zA-Z0-9\\u4e00-\\u9fa5]+\\]"


下面的宏定义方法在SDWebImage中定义
不在主线程执行block

#define dispatch_main_sync_safe(block)\
    if ([NSThread isMainThread]) {\
        block();\
    } else {\
        dispatch_sync(dispatch_get_main_queue(), block);\
    }

在主线程去执行block

    #define dispatch_main_async_safe(block)\
    if ([NSThread isMainThread]) {\
        block();\
    } else {\
        dispatch_async(dispatch_get_main_queue(), block);\
    }

参考地址

相关文章

  • 宏定义和宏方法

    宏定义和宏方法 定义机型 定义手机系统型号 宏定义屏幕宽度和高度 定义打印的东西 通过RGB获得一个颜色 验证手机...

  • IOS NSLog宏定义

    IOS NSLog宏定义 标签(空格分隔): IOS IOS NSLog宏定义 宏定义NSLog方法,不用加";"...

  • 准备:回顾c

    宏定义 关键字 define 定义一个常量的方法(即宏定义) 带参数的宏定义 宏函数的定义 使用宏函数的好处是,不...

  • 10/19

    今天老师讲了预处理命令,宏定义分为无参宏定义,带参宏定义和条件编译。宏定义包括宏名和宏展开,和函数相比预处理有很多...

  • Unity shader中的#if和#ifdef

    在研究宏定义的时候发现,如果不先理解#if和#ifdef宏定义的判断方法,去看宏定义的时候会乱七八糟的。网络资源此...

  • iOS字体大小适配的几种方法

    方法一:用宏定义适配字体大小(根据屏幕尺寸判断) //宏定义 方法二:用宏定义适配字体大小(根据屏幕尺寸判断) 1...

  • c高级自我学习(1)

    1 编译预处理和宏定 #undef指令删除前面定义的宏定义。 无参宏定义:宏名中没有参数。 1,宏定义中宏名用来表...

  • SDWebImage源码解读

    整体架构 按照分组方式,可以分为几组 定义通用宏和方法 SDWebImageCompat: 宏定义和C语言的一些工...

  • MJExtension

    <1> MJExtensionConst .h -- 宏定义error/log,一堆断言,宏定义重写desc方法(...

  • 5月31

    今天学习了宏定义 宏定义分为:不带参数的宏定义和带参数的宏定义,不占用任何内存空间,宏定义时不加分号。 #defi...

网友评论

      本文标题:宏定义和宏方法

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