iOS Objective-C: weakSelf 语法

iOS Objective-C: weakSelf Syntax

几乎我在网上遇到的每个 weakSelf 模式的例子都有语法

__weak typeof(self) weakSelf = self;

但是编译器在最新版本Xcode中抱怨这种语法,要求:

__weak __typeof__(self) weakSelf = self;

是语法改变了,还是我遗漏了导入?我尝试拉入 <objc/runtime.h> 但没有变化。

隐秘的奖励问题:为什么不直接施放它呢?

__weak MyBoffoClass *weakSelf = self;

我在这里找到了一个答案,说最好直接投射它,但没有理由解释为什么。

在@danh 的帮助下指向我 Difference between typeof, __typeof and __typeof__ (Objective-c),我发现问题出在编译器设置中。

点击Project Navigator上方的项目window,点击Build Settings,选择View All

接下来向下滚动到 Apple LLVM nn - 语言并检查设置:

在我的例子中,语言方言设置为 C99,它不支持 GNU 编译器宏和 C 语言的其他扩展。

不确定为什么项目要这样设置(项目架构师不记得为什么),我只需要在阅读 Whosebug 代码片段时考虑到这一事实。因为我是个懒惰的打字员,所以比通过更改来介绍更好。