如何在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