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 n。n - 语言并检查设置:
在我的例子中,语言方言设置为 C99,它不支持 GNU 编译器宏和 C 语言的其他扩展。
不确定为什么项目要这样设置(项目架构师不记得为什么),我只需要在阅读 Whosebug 代码片段时考虑到这一事实。因为我是个懒惰的打字员,所以比通过更改来介绍更好。
几乎我在网上遇到的每个 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 n。n - 语言并检查设置:
在我的例子中,语言方言设置为 C99,它不支持 GNU 编译器宏和 C 语言的其他扩展。
不确定为什么项目要这样设置(项目架构师不记得为什么),我只需要在阅读 Whosebug 代码片段时考虑到这一事实。因为我是个懒惰的打字员,所以比通过更改来介绍更好。