xcode 如何在Objective-C中弃用方法

au9on6nz  于 2022-12-24  发布在  其他
关注(0)|答案(5)|浏览(179)

我们有我们的库,我们发送给我们的客户,我想标记为“弃用”的一些方法,因为我们改变了他们(像苹果在iPhone SDK中所做的)。
我看过__OSX_AVAILABLE_BUT_DEPRECATED预处理器宏,它Map到__AVAILABILITY_INTERNAL__AVAILABILITY_INTERNALMap到__attribute__((deprecated))...
我对这些东西有点困惑!
有人知道些什么吗?

u4vypkhs

u4vypkhs1#

__attribute__((deprecated))是gcc标记一个函数/方法为deprecated的方式(clang也支持),当一个函数/方法被标记为deprecated时,任何人调用它都会产生一个警告。
普通函数的语法为

__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

还可以使用将整个类标记为已弃用

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

Apple还提供<AvailabilityMacros.h>头文件,其中提供DEPRECATED_ATTRIBUTE和DEPRECATED_MSG_ATTRIBUTE(msg)宏,扩展到上述属性,或者如果编译器不支持属性,则不提供任何宏。
边注,如果你使用Swift,你可以使用@available attribute来弃用一个项目,例如

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

j9per5c42#

您还可以使用可读性更强的defineDEPRECATED_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

您也可以将整个类标记为deprecated:

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

xuo3flqw3#

斯威夫特5.0
弃用任何使用@available的方法/类/结构/协议

@available(*, deprecated, message: "Parse your data by hand instead")
func parseData() { }

@available(*, deprecated, renamed: "loadData")
func fetchData() { }

@available(swift, obsoleted: 4.1, renamed: "attemptConnection")
func testConnection() { }

@available(swift, deprecated: 4.0, obsoleted: 5.0, message: "This will be removed in v5.0; please migrate to a different API.")

可能的参数:

  • 引进的
  • 不赞成的
  • 废弃的
  • 讯息
  • 更名

欲了解更多信息,请参阅苹果文档:Attributes

dgenwo3n

dgenwo3n4#

如果您在xcode项目中使用C++14,您还可以使用[[deprecated]][[deprecated("reason")]]属性,该属性现在是语言的一部分。
参见文档:http://en.cppreference.com/w/cpp/language/attributes

kwvwclae

kwvwclae5#

-对于SWIFT代码:

把这个放在方法的正上方:第一个月
示例:

@available(*, deprecated: 11, message: "Use color assets instead")
public struct ColorPaletteItemResource: ColorPaletteItemResourceType {
    ...
}

相关问题