我继承了一个新项目,该项目有多个保留周期警告,这是由于在各个区块中隐含地保留了自我。
在尝试解决这些问题时,我已写过
__weak typeof(self) weakSelf = self;
创建一个弱引用以便在块中使用。
然而,Xcode v.5.1.1给出了神秘的警告
Lexical or Preprocessor Issue
Extension used
我在这里不知所措 - 这意味着什么,我怎么能摆脱它呢?
答案 0 :(得分:7)
如果在构建设置中启用了“迂腐警告”,则会出现typeof
使用此警告。
从此设置的“快速帮助”:
描述发出严格的ISO C和ISO要求的所有警告 C ++;拒绝使用禁止扩展的所有程序,以及其他一些程序 不遵循ISO C和ISO C ++的程序。对于ISO C,请遵循 由任何使用的-std选项指定的ISO C标准的版本。 [GCC_WARN_PEDANTIC,-pedantic]
我不是(ISO)C标准的专家,但根据 https://gcc.gnu.org/onlinedocs/gcc/Typeof.html:
如果您正在编写包含在ISO C中必须工作的头文件 程序,写
__typeof__
而不是typeof
。请参阅备用关键字。
和http://clang.llvm.org/docs/UsersManual.html:
解析器将“
asm
”和“typeof
”识别为gnu *模式中的关键字; 变体“__asm__
”和“__typeof__
”在所有模式中都被识别。
您可以使用__typeof__
代替
如果您不想禁用警告:
__weak __typeof__(self) weakSelf = self;