我有一个预处理器命令用于检测 iOS 版本和是否支持 iCloud。我想知道是否有这样的宏:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 50000
//stuff
#endif
如果使用 iOS 4.x 的人从应用商店下载该应用程序但它是在 iOS 5.x 上/为 iOS 5.x 编译的,这会起作用吗?
由于这将在编译时进行评估,因此应用程序是在设备上编译的还是如何工作的?对于相同的结果,是否有更好的方法?
最佳答案
你不能为此使用宏。宏是在编译时评估的,而不是在运行时,这是你想要的特性/能力检测,比如 iCloud 支持。 (否则你最终会启用它,因为你在所有情况下都针对 iOS 5 SDK 编译)
你应该只测试普遍存在的方法,它会告诉你是否可以调用它们,它会告诉你是否支持 iCloud,例如:
if ([[NSFileManager defaultManager] respondsToSelector:@selector(isUbiquitousItemAtURL:)])
{
// call it and do other iCloud stuff
}
快速跟进说明:关于编译的问题。编译是将您的实际代码转换为可在设备上运行的二进制文件的过程。当您在 Xcode 中构建时会发生这种情况,并且只会在您的机器上发生,而不会在 Apple 或设备上发生。这就是版本号的编译时检查不起作用的原因——当您将它发送到设备时,已经做出了决定。
关于ios - 版本特定的预处理器宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7879425/