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;