16

ReactiveCocoa 框架使用weakifystrongify宏,它们前面都有一个“@”符号。

这是一个示例(来自此文件)。

- (RACSignal *)rac_textSignal {
        @weakify(self);
        return [[[[RACSignal
                ... 
               ];
}

作为宏名称前缀的 at 符号有什么意义?(注意:我检查了宏,它被称为'weakify',而不是'@weakify',所以它不仅仅是宏名称!)。

宏本身在这里定义:

https://github.com/jspahrsummers/libextobjc/blob/master/extobjc/EXTScope.h#L45

4

2 回答 2

18

以 .开头的宏没有特殊含义@。这是在 libextobjc 中完成的,以使@weakify@strongify宏在语言的其余部分中看起来更惯用。

从技术上讲,@不是宏的一部分。宏就是weakifyor strongify。但是,宏的实际主体是这样编写的,除非以@. 这是通过@autoreleasepool {}在宏的开头添加一个空白来完成的,但去掉前导的@.

于 2013-12-31T18:49:17.133 回答
7

@不是宏的一部分。weakify定义为:

#define weakify(...) \
    autoreleasepool {} \
    metamacro_foreach_cxt(ext_weakify_,, __weak, __VA_ARGS__)

于是@weakify(self)变成:

@autorelease {} metamacro_foreach_cxt(ext_weakify_,, __weak, self)
于 2013-12-31T18:49:54.570 回答