运行时与编译时iPhone版本检查

ma1*_*w28 8 iphone runtime version compile-time ios

运行时(例如[[UIDevice currentDevice] systemVersion])和编译时之间有什么区别,例如__IPHONE_OS_VERSION_MIN_REQUIRED检查?什么时候你应该一个在另一个?

难道__IPHONE_OS_VERSION_MIN_REQUIRED只是一个变量构建设置设置?

我已经阅读了如何定位特定iPhone版本的答案以及下面列出的其他相关问题.

但是,我刚刚注意到__IPHONE_OS_VERSION_MIN_REQUIRED = 30200当我使用Xcode 4在iPhone(4.3.1)上构建和运行时.为什么?

当您将代码提交给Apple时,他们是否为每个存在的iPhone版本编译了一个版本,并相应地进行设置__IPHONE_OS_VERSION_MIN_REQUIRED

这样,您可以检查__IPHONE_OS_VERSION_MIN_REQUIRED并了解运行代码的iOS版本.

相关问题:

ugh*_*fhw 9

__IPHONE_OS_VERSION_MIN_REQUIRED确实只是一个构建设置,您可以在预处理器中使用它来在编译之前修改代码.不,Apple不会为每部iPhone编译代码.他们不能,因为你没有给他们代码.例如,您可以使用编译时检查来确定是否需要编译代码以模拟旧操作系统版本中的新功能.但是,您使用运行时版本检查来确定是否应使用该功能的内置版本或模拟版本.

例如,iAds是在4.0中添加的.您目前支持4.0及更高版本,但计划在将来添加对3.2的支持.您使代码显示旧版本中的其他广告,使用运行时检查来确定您是否应该使用iAds,但是在应用程序的其余部分准备好3.2之前,您不希望它出现在任何版本中,因为它将让你的应用更大.您使用编译时检查,以便预处理器将该代码保留在您的版本之外.通过使用最小版本宏,您可以通过更改最低版本构建设置轻松地将代码添加到您的版本中.