我使用了weakify / strongify宏,我希望将下一个逻辑移到宏中。
@weakify(self);
BOOL (^matchesFooOrBar)(id) = ^ BOOL (id obj){
@strongify(self);
if (self == nil) return; // I want to move it to the macros
strongify
定义:
#define strongify(...) \
rac_keywordify \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Wshadow\"") \
metamacro_foreach(rac_strongify_,, __VA_ARGS__) \
_Pragma("clang diagnostic pop")
有什么建议吗?
答案 0 :(得分:1)
我花了一些时间来搞清楚......
#define myStrongify(first, ...) \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Wshadow\"") \
metamacro_foreach(rac_strongify_,, __VA_ARGS__) \
if (!first) { NS_VALUERETURN(NO, BOOL); } \
_Pragma("clang diagnostic pop")
用法如下:
BOOL (^matchesFooOrBar)(id) = ^BOOL(id obj) {
NSLog(@"before");
myStrongify(obj);
NSLog(@"after");
// your custom logic here
...
return YES;
};
仅供参考,来自Apple文档的NS_VALUERETURN
。请随意测试。