ReactiveCocoa 框架利用weakify
and strongify
宏,两者前面都有一个“@”符号。
这是一个例子(从这个file https://github.com/ReactiveCocoa/ReactiveCocoa/blob/fd533d07b64d40cf79d069584d8cd95158998095/ReactiveCocoaFramework/ReactiveCocoa/NSControl+RACTextSignalSupport.m#L19).
- (RACSignal *)rac_textSignal {
@weakify(self);
return [[[[RACSignal
...
];
}
作为宏名称前缀的 at 符号有什么意义? (注意:我已经检查了宏,它被称为“weakify”,而不是“@weakify”,所以它不仅仅是宏名称!)。
宏本身定义如下:
https://github.com/jspahrsummers/libextobjc/blob/master/extobjc/EXTScope.h#L45 https://github.com/jspahrsummers/libextobjc/blob/master/extobjc/EXTScope.h#L45
以 a 开头的宏没有特殊含义@
。这是在 libextobjc 中完成的,以使@weakify
and @strongify
宏对于语言的其余部分来说似乎更惯用。
从技术上讲,@
不是宏的一部分。宏只是weakify
or strongify
。然而,宏的实际主体是这样编写的,除非前面带有@
。这是通过添加一个空的@autoreleasepool {}
在宏的开头,但去掉前导@
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)