onExit概念
#define onExit \
rac_keywordify \
__strong rac_cleanupBlock_t metamacro_concat(rac_exitBlock_, __LINE__) __attribute__((cleanup(rac_executeCleanupBlock), unused)) = ^
#if DEBUG
#define rac_keywordify autoreleasepool {}
#else
#define rac_keywordify try {} @catch (...) {}
#endif
/*** implementation details follow ***/
typedef void (^rac_cleanupBlock_t)(void);
static inline void rac_executeCleanupBlock (__strong rac_cleanupBlock_t *block) {
(*block)();
}
#define metamacro_concat(A, B) \
metamacro_concat_(A, B)
#define metamacro_concat_(A, B) A ## B
宏的各个部分解析
使用示例
解释
展开上面的宏
Step 1: 展开 onExit
onExitStep 2: 展开 rac_keywordify
rac_keywordifyStep 3: 展开 metamacro_concat
metamacro_concat最终结果
执行效果
rac_keywordify 会替换称为autoreleasepool {} 是不是很多余?
Last updated