iOS:OS版本检查的预处理器

Fra*_*kZp 5 objective-c ios c-preprocessor

在过去,我使用以下预处理器代码有条件地执行不同iOS版本的代码:

#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
// target is iOS
    #if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000
    // target is lower than iOS 6.0
    #else
    // target is at least iOS 6.0
    #endif
#endif
Run Code Online (Sandbox Code Playgroud)

但是对于iOS 7,我有以下问题:

#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
// target is iOS
    #if __IPHONE_OS_VERSION_MIN_REQUIRED < 70000
    // target is lower than iOS 7.0
    NSLog(@"This message should only appear if iOS version is 6.x or lower");
    #else
    // target is at least iOS 7.0
    #endif
#endif
Run Code Online (Sandbox Code Playgroud)

NSLog上面的消息显示在iOS 7下的控制台上.我做错了吗?

编辑:以下代码在iOS 7下运行(模拟器和设备)

NSLog(@"Version %i", __IPHONE_OS_VERSION_MIN_REQUIRED);
Run Code Online (Sandbox Code Playgroud)

给出:版本60000

Ant*_* MG 8

这是应用程序的部署目标(可以安装应用程序的最低版本),而不是应用程序在设备中运行的版本.

在项目的设置中,您可以设置该字段:

在此输入图像描述

如果你这样改变它,这个输入:

NSLog(@"Version %i", __IPHONE_OS_VERSION_MIN_REQUIRED);
Run Code Online (Sandbox Code Playgroud)

返回7000

如果你想要的是检查操作系统的实际版本,我建议你这个问题:

如何查看iOS版本?

但是,它是在运行时完成的,而不是在编译时完成的.