Col*_*inE 16 macros objective-c reactive-cocoa
ReactiveCocoa框架使用weakify和strongify宏,两者都以"@"符号开头.
这是一个例子(来自这个文件).
- (RACSignal *)rac_textSignal {
@weakify(self);
return [[[[RACSignal
...
];
}
Run Code Online (Sandbox Code Playgroud)
作为宏名称前缀的at符号有什么意义?(注意:我已经检查了宏,它被称为'弱化',而不是'@weakify',因此它不仅仅是宏名称!).
宏本身在这里定义:
https://github.com/jspahrsummers/libextobjc/blob/master/extobjc/EXTScope.h#L45
BJ *_*mer 18
对于以@.开头的宏没有特殊含义.这是在libextobjc中完成的,以使得@weakify和@strongify宏在语言的其余部分看起来更加惯用.
从技术上讲,@它不是宏观的一部分.宏只是weakify或strongify.但是,宏的实际主体是这样编写的,除非在前面加上,否则它不会编译@.这是通过@autoreleasepool {}在宏的开头添加一个空来完成的,但是剥离了前导@.
这@不是宏的一部分.weakify定义为:
#define weakify(...) \
autoreleasepool {} \
metamacro_foreach_cxt(ext_weakify_,, __weak, __VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)
所以@weakify(self)就变成了:
@autorelease {} metamacro_foreach_cxt(ext_weakify_,, __weak, self)
Run Code Online (Sandbox Code Playgroud)