如何在可用性宏中禁止弃用警告?我知道可用性是检查新 API 的好方法,但我正在努力如何抑制弃用警告。除了下面提到的那些,我还有什么选择?(1.编译指示 2.执行选择器(
MyModel *model;
if (@available(macOS 10.13, *)) {
NSError *error;
model = [NSKeyedUnarchiver unarchivedObjectOfClass:[MyModel class] fromData:metadata error:&error];
if (error) {
[[NSAlert alertWithError:error] runModal];
}
} else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated"
model = [NSKeyedUnarchiver unarchiveObjectWithData:metadata];
#pragma clang diagnostic pop
}
或者用于抑制警告
if ([NSKeyedUnarchiver respondsToSelector:@selector(unarchiveObjectWithData:)]) {
model = [NSKeyedUnarchiver performSelector:@selector(unarchiveObjectWithData:) withObject:metadata];
}
仅当您使用的 API 在目标的部署目标或之前已弃用时,才会收到弃用警告。
NSKeyedUnarchiver unarchiveObjectWithData
从 macOS 10.14 开始已弃用。仅当目标的部署目标是 macOS 10.14 或更高版本时,您才会收到弃用警告。但是您发布的代码暗示您希望支持 macOS 10.12 或更早版本。
NSKeyedUnarchiver unarchivedObjectOfClass:fromData:error:
是在 macOS 10.13 中添加的。
如果您真的只需要macOS 10.13或更高版本的部署目标,则不需要if (@available(macOS 10.13, *))
或else
。只需使用新的 API 即可完成。
问题中的代码(减去杂注(仅在您想要支持 macOS 10.12 或更早版本时才应使用。然后,目标的部署目标需要设置为 macOS 10.12 或更低版本。在这种情况下,您不需要编译指示,也不会收到任何弃用警告。