2013-06-04 49 views
5

在Objective C中的参数错误有以下代码标记为过时的方法:一些关于属性

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

此代码已建议hereherehere,可能在几个地方是我现在无法回想起我的头顶。

我无法编译此代码。我得到的编译器错误是“为'不可用'属性指定的错误数量的参数”。对于不赞成使用的属性,同样的错误。如果我删除它编译的字符串,但我想知道如何编译的字符串。由于它已经被多个人单独提出并且甚至被高估,所以它必须是工作代码。但我似乎无法编译它。

我在做什么错?如何使这个编译?

+0

请尝试使用'UNAVAILABLE_ATTRIBUTE'。它在Apple的头文件中定义,以及'DEPRECATED_ATTRIBUTE'。 – Greg

+0

是的,谢谢。我也尝试过,也没有效果。但我的问题不是关于如何通常废弃方法,而是如何编译这一行代码。 –

+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和苹果LLVM采取这两种风格

-(void)oldMethod __attribute((deprecated())); 
//or 
-(void)oldMethod2 DEPRECATED_ATTRIBUTE; 

LLVM GCC抱怨以下方法格式,其中苹果LLVM工作正常(这实际上回答你的问题。你的编译器使用LLVM GCC或较旧的版本)

-(void)oldMethod __attribute((deprecated("Don't use Old Method"))); 

长话短说,一定要保持备份,然后再进行这些构建设置和更改。

  1. 检查适当的Xcode运行(4.6.2是最新的),我结束了的版本不同的杂波和不得不做清理。

  2. 检查“Build Options”下项目设置中的哪些编译器版本可用。 (我指出上面的答案)

  3. 对于较老的项目,您可能需要检查使用ARC进行重构并转换为现代objective-c。只要确保备份,在较大的项目中可能会很麻烦。 (Edit-> Refactor-> Modern Objective-C) Videos; WWDC 2011重构与自动引用计数 WWDC 2012现代Objective-C的影片https://developer.apple.com/videos/wwdc/2012/

    注:现代Objective-C的重构将变为苹果LLVM编译器。随着其他变化。

如果这个答案成为你的问题的核心,请帮助我投票! TIA!