5

在 Objective C 中有以下代码将方法标记为过时:

__attribute__((unavailable("message text")));

此处此处此处已建议了此代码,可能还有一些我现在想不起来的地方。

我无法编译此代码。我得到的编译器错误是“为'不可用'属性指定的参数数量错误”。不推荐使用的属性也有同样的错误。如果我删除它编译的字符串,但我想知道如何字符串编译它。由于它是由几个人独立提出的,甚至得到了赞成,它一定是工作代码。但我似乎无法让它编译。

我究竟做错了什么?如何使这个编译?

4

1 回答 1

1

在我的搜索中,我找到了关于此的 clang 文档; Clang 语言扩展

我的 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")));

长话短说,在搞乱这些构建设置和更改之前,请务必进行备份。

  1. 检查正确的 Xcode 是否正在运行(4.6.2 是最新的),我最终得到了不同版本的混乱,不得不进行清理。

  2. 检查“构建选项”下的项目设置中哪些编译器版本可用。(我在上面指出了那个答案)

  3. 对于较旧的项目,您可能需要检查使用 ARC 进行重构并转换为现代 Objective-c。请务必保留备份,在较大的项目中可能会很麻烦。(编辑->重构->现代Objective-C)视频;WWDC 2011 使用自动引用计数进行重构 WWDC 2012 现代 Objective-C 视频 https://developer.apple.com/videos/wwdc/2012/

    注意:现代 Objective-C 重构将更改为 Apple-LLVM 编译器。连同其他变化。

如果这个答案成为您问题的核心,请通过投票来帮助我!蒂亚!

于 2013-06-10T07:22:39.340 回答