如何检查 class 或 CFType 在 Objective-C 中是否可用

How to check if a class or CFType is available in Objective-C

我现在在 iOS8 工作,我想检查 CFType 'SecAccessControlRef' 是否可用。由于该应用程序将支持 iOS 7,如果不进行检查,该应用程序将崩溃。对于常规的 NSClass,我只会使用像

这样的检查
if (NSClassFromString('SomeClass') == NULL)

但是对于非 NSClass 项目是否有类似的东西?

这不是您想要的,但我已将其用于类似类型的问题:

if (&kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly == NULL) {
    return NO; // must be on iOS7
}

您可以测试支持该类型的函数之一,而不是测试 类型 本身。当框架是弱链接时,如果框架不存在,C 函数的地址将为 NULL。例如你应该能够使用类似的东西:

BOOL isSecAccessControlRefAvailable = SecAccessControlCreateWithFlags != NULL;

请参阅 Apple SDK Compatibility Guide 中的使用弱链接方法、函数和符号