Objc 中一些常用宏

C/C++/Objc 中用于日志输出的预处理宏

Macro Format Specifier Description
__func__ %s 当前函数前面
__LINE__ %d 源码文件中的行号
__FILE__ %s 源码文件完整路径
__PRETTY_FUNCTION__ %s 和__func__类似, 但是在 C++ 代码中包含更多的信息.

线程相关

#ifndef dispatch_main_async_safe
#define dispatch_main_async_safe(block)\
    if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(dispatch_get_main_queue())) == 0) {\
        block();\
    } else {\
        dispatch_async(dispatch_get_main_queue(), block);\
    }
#endif

布局相关

#define kStatusHeight [[UIApplication sharedApplication] statusBarFrame].size.height
#define kScreenWidth  [UIScreen mainScreen].bounds.size.width
#define kScreenHeight [UIScreen mainScreen].bounds.size.height

Log相关


Objc 中用于日志输出的表达式

Expression Format Specifier Description
NSStringFromSelector(_cmd) %@ 当前选择器的名字
NSStringFromClass([self class]) %@ 当前对象类的名字
[[NSString stringWithUTF8String:__FILE __] lastPathComponent] %@ 源码文件的名称
[NSThread callStackSymbols] %@ 当前栈信息的刻度字符串数组。仅用于调试,不用向终端用户展示或者在代码中用作任何逻辑。
// 直接定位到debug的函数名,以及当前代码所在文件中得行数。
NSLog(@"%s, %d", __FUNCTION__, __LINE__); 
// 打印当前的函数名, NSStringFromSelector 获得参数的选择器所代表的方法的字符串
NSLog(@"%@", NSStringFromSelector(_cmd));
// 打印当前源代码文件全路径 
NSLog(@"%s", __FILE__);
// 上面介绍过:像 __func__,但是包含了C++代码中的隐形类型信息。
NSLog(@"%s", __PRETTY_FUNCTION__);

颜色相关

#define kUIColorOfHex(color) [UIColor colorWithHex:(color) alpha:1.0]
#define kUIColorOfRGB(r, g, b, a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]

文件相关


设备相关

判空相关

//字符串是否为空
#define IsStrEmpty(_ref)    (((_ref) == nil) || ([(_ref) isEqual:[NSNull null]]) ||([(_ref)isEqualToString:@""]))

//数组是否为空
#define IsArrEmpty(_ref)    (((_ref) == nil) || ([(_ref) isEqual:[NSNull null]]) ||([(_ref) count] == 0))

//获取非nil 字符串
#define getNotNilStr(str) IsStrEmpty(str)?@"":str

block相关

#define WeakObj(o)   autoreleasepool{} __weak __typeof(o) o##Weak = o;
#define StrongObj(o)  autoreleasepool{} __strong __typeof(o##Weak) o##Strong = o##Weak;