Objective-C宏的含义以at(@)符号为前缀

 小月骄阳 发布于 2023-02-07 12:10

ReactiveCocoa框架使用weakifystrongify宏,两者都以"@"符号开头.

这是一个例子(来自这个文件).

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

作为宏名称前缀的at符号有什么意义?(注意:我已经检查了宏,它被称为'弱化',而不是'@weakify',因此它不仅仅是宏名称!).

宏本身在这里定义:

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

2 个回答
  • @不是宏的一部分.weakify定义为:

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

    所以@weakify(self)就变成了:

    @autorelease {} metamacro_foreach_cxt(ext_weakify_,, __weak, self)
    

    2023-02-07 12:13 回答
  • 对于以@.开头的宏没有特殊含义.这是在libextobjc中完成的,以使得@weakify@strongify宏在语言的其余部分看起来更加惯用.

    从技术上讲,@它不是宏观的一部分.宏只是weakifystrongify.但是,宏的实际主体是这样编写的,除非在前面加上,否则它不会编译@.这是通过@autoreleasepool {}在宏的开头添加一个空来完成的,但是剥离了前导@.

    2023-02-07 12:13 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有