如何在Xcode中弃用一个方法

我们有我们的图书馆我们运送给我们的客户,我想标记一些方法为“已弃用”,因为我们改变了他们(如苹果在iPhone SDK中)。

我看到__OSX_AVAILABLE_BUT_DEPRECATED预处理器macros映射到__AVAILABILITY_INTERNAL ,映射到__attribute__((deprecated))

那么我有点困惑这个东西!

有人知道吗?

__attribute__((deprecated))是将函数/方法标记为不赞成使用的gcc方法 (也是在clang中支持的 )。 当一个人被标记为“已弃用”时,每当有人打电话时都会发出警告。

正常function的语法是

 __attribute__((deprecated)) void f(...) { ... } // gcc 4.5+ / clang __attribute__((deprecated("g has been deprecated please use g2 instead"))) void g(...) { ... } 

而Objective-C方法则是这样

 @interface MyClass : NSObject { ... } -(void)f:(id)x __attribute__((deprecated)); ... @end 

您也可以将整个class级标记为已弃用

 __attribute__((deprecated)) @interface DeprecatedClass : NSObject { ... } ... @end 

Apple还提供了<AvailabilityMacros.h>头文件,它提供了扩展到上述属性的DEPRECATED_ATTRIBUTE和DEPRECATED_MSG_ATTRIBUTE(msg)macros,或者如果编译器不支持属性,则不需要任何东西。 请注意,此标头不存在OS X / iOS之外。


注意,如果你正在使用Swift,你可以使用@available属性去弃用一个项目,例如

 @available(*, deprecated=2.0, message="no longer needed") func f() { ... } 

你也可以使用更多可读的定义 DEPRECATED_ATTRIBUTE

它在usr/include/AvailabilityMacros.h定义:

 #define DEPRECATED_ATTRIBUTE __attribute__((deprecated)) #define DEPRECATED_MSG_ATTRIBUTE(msg) __attribute((deprecated((msg)))) 

Objective-C方法示例:

 @interface MyClass : NSObject { ... } -(void)foo:(id)x DEPRECATED_ATTRIBUTE; // If you want to specify deprecated message: -(void)bar:(id)x DEPRECATED_MSG_ATTRIBUTE("Use baz: method instead."); ... @end 

您也可以将整个class级标记为已弃用:

 DEPRECATED_ATTRIBUTE @interface DeprecatedClass : NSObject { ... } ... @end 

如果您在xcode项目中使用C ++ 14,则还可以使用现在是该语言一部分的[[deprecated]][[deprecated("reason")]]属性。

请参阅文档: http : //en.cppreference.com/w/cpp/language/attributes