ios - 版本特定的预处理器宏

标签 ios objective-c iphone app-store c-preprocessor

我有一个预处理器命令用于检测 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/

相关文章:

ios - Xamarin ios 如何在编辑时制作一个自适应大小的 UITableViewCell

objective-c - UITableView 不滚动

ios - 如何在 Collection View 中显示从图库中选择的多张图像?

objective-c - 为什么ARC转换将 "weak"装饰器添加到 "readonly"属性?

iphone - StackScrollView 与委托(delegate) ID MBProgressHUD 的问题

iphone - 需要使用 Web View 访问我的单 View ios 应用程序中的 url

ios - 简单的ios动画: rotate window and reverse

ios - 即使应用程序被杀死,是否可以与 ios 设备交互?

iphone - 从 UISegmentedControl 中删除白色渐变

iphone - UIButton 在第一次点击时不工作