在Objective C中,有以下代码将方法标记为已废弃:
__attribute__((unavailable("message text")));
此代码已被建议here,here和here,可能还有一些我现在无法回想起来的地方。
我无法编译此代码。我得到的编译器错误是“为'unavailable'属性指定的参数数量错误”。弃用属性的错误相同。如果我删除它编译的字符串,但我想知道如何使用字符串编译它。由于有几个人独立建议并且甚至被投票,它必须是工作代码。但我似乎无法编译。
我做错了什么?如何编译?
答案 0 :(得分:1)
在我的搜索中,我找到了关于此的clang文档; Clang Language Extensions
我的Xcode版本是4.6.2,我尝试了没有ARC的LLVM-gcc,以确保gcc编译器仍然可以使用扩展。
我的C / C ++ / Objective-C选项编译器是; LLVM GCC 4.2和Apple LLVM编译器。
这两个属性都在.h头文件中。 LLVM GCC和APPLE LLVM都采用这两种风格
-(void)oldMethod __attribute((deprecated()));
//or
-(void)oldMethod2 DEPRECATED_ATTRIBUTE;
LLVM GCC抱怨以下方法格式,Apple LLVM正常工作(这实际上回答了您的问题。您的编译器使用的是LLVM GCC或更旧版本)
-(void)oldMethod __attribute((deprecated("Don't use Old Method")));
简而言之,请务必在弄乱这些构建设置和更改之前保留备份。
检查正确的Xcode是否正在运行(4.6.2是最新版本),我最终得到了一个不同版本的混乱,不得不进行清理。
检查“构建选项”下项目设置中可用的编译器版本。 (我在上面表示答案)
对于较旧的项目,您可能需要检查使用ARC进行重构并转换为现代objective-c。只要确保备份,在较大的项目上它可能会很麻烦。 (编辑 - >重构 - >现代目标-C) 影片; WWDC 2011使用自动引用计数进行重构 WWDC 2012现代Objective-C视频https://developer.apple.com/videos/wwdc/2012/
注意:现代Objective-C重构将更改为Apple-LLVM编译器。以及其他变化。
如果这个答案成为你问题的核心,请通过投票来帮助我! TIA!