iOS Objective-C: weakSelf Syntax

3
几乎我在网上遇到的每个weakSelf模式的示例都有以下语法:
__weak typeof(self) weakSelf = self;

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

__weak __typeof__(self) weakSelf = self;

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

隐秘的奖励问题:为什么不直接进行显式转换?

__weak MyBoffoClass *weakSelf = self;

我在这里找到了一个答案,它说直接转换更好,但没有解释为什么。

1
这里有一个看起来合理的答案:https://dev59.com/YGUp5IYBdhLWcg3w_rrT - danh
谢谢,我搜索了typeof但没有得到结果,显然应该深入挖掘,谢谢。 - Nate Birkholz
1个回答

0

在得到@danh的帮助并查看typeof、__typeof和__typeof__(Objective-c)之间的区别后,我发现问题出在编译器设置上。

点击项目导航器窗口顶部的项目,点击构建设置,并选择查看全部Choosing Settings

接下来向下滚动到Apple LLVM n.n - Language并检查设置: Language Settings

在我的情况下,语言方言被设置为C99,它不支持GNU编译器宏和其他扩展C语言的功能。

不确定为什么项目会这样设置(项目架构师也不记得原因),我只需要在阅读StackOverflow代码片段时考虑到这一点。比起因为我是一个懒惰的打字员而进行更改引入问题,这样做更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接