运行时(例如[[UIDevice currentDevice] systemVersion]
)和编译时(例如__IPHONE_OS_VERSION_MIN_REQUIRED
检查)之间有什么区别?你什么时候应该在另一个上面?
__IPHONE_OS_VERSION_MIN_REQUIRED
只是在构建设置中设置的变量吗?
我已阅读How to target a specific iPhone version?的答案以及下面列出的其他相关问题。
但是,我刚刚注意到__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版本。
答案 0 :(得分:9)
__IPHONE_OS_VERSION_MIN_REQUIRED
确实只是一个构建设置,您可以在预处理器中使用它来在编译之前修改代码。不,Apple不会为每部iPhone编译代码。他们不能,因为你没有给他们代码。例如,您可以使用编译时检查来确定是否需要编译代码以模拟旧操作系统版本中的新功能。但是,您使用运行时版本检查来确定是否应使用该功能的内置版本或模拟版本。
例如,iAds是在4.0中添加的。您目前支持4.0及更高版本,但计划在将来添加对3.2的支持。您使代码显示旧版本中的其他广告,使用运行时检查来确定您是否应该使用iAds,但是在应用程序的其余部分准备好3.2之前,您不希望它在任何版本中,因为它将让你的应用更大。您使用编译时检查,以便预处理器将该代码保留在您的版本之外。通过使用最小版本宏,您可以通过更改最低版本构建设置轻松地将代码添加到您的版本中。
答案 1 :(得分:3)
是的,__IPHONE_OS_VERSION_MIN_REQUIRED
只是“构建设置”下“iOS部署目标”的值。确保选择了正确的目标,而不是项目。
而且,__IPHONE_OS_VERSION_MAX_ALLOWED
对应于“Base SDK”构建设置。
答案 2 :(得分:0)
编译和运行时或编程将由开发人员使用的单词。因此,编译时的最佳示例是代码的编写时间,如导入语法和声明属性和方法。ARC是编译时编程。在开发人员编写代码之后来到RUNTime即将执行该程序称为运行时。在这段时间里,代码将被编译并将面临运行时错误,例如崩溃程序和fourse会关闭程序的意外行为。
请查看以下网址了解更多详情