如果self为零,则Objective-C @strongify返回

时间:2016-02-17 13:31:13

标签: objective-c macros reactive-cocoa

我使用了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")

有什么建议吗?

1 个答案:

答案 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。请随意测试。