何时使用“#if __IPHONE_OS_VERSION_MIN_REQUIRED > x”?

Posted

技术标签:

【中文标题】何时使用“#if __IPHONE_OS_VERSION_MIN_REQUIRED > x”?【英文标题】:When to use "#if __IPHONE_OS_VERSION_MIN_REQUIRED > x"? 【发布时间】:2012-11-16 01:42:21 【问题描述】:

This question 解决了如何根据 ios 版本有条件地包含代码。但它是如何工作的呢?

假设我在 Xcode 4.5.2 中将 iOS Deployment Target 设置为 3.2。在我的代码中,我输入了一些 #ifdef 语句:

#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_4_0
  // Some iOS 4+ code
#endif

如果我在 3.2 设备上运行该代码,则该代码将不存在,但如果我在 4.3 设备上运行它,它会存在,对吗?这是怎么发生的?还是我误解了这里发生了什么?

【问题讨论】:

您的目标是什么?您是想根据使用不同版本的 Xcode 编译不同的代码,还是尝试为单个应用程序编写代码,使其能够在不同版本的 iOS 设备上正常运行? 阅读一些 SDK 代码。由于人们会将它与不同版本的 XCode 一起使用,鉴于 Bovinedragon 的解释,我可以理解它为什么存在。 【参考方案1】:

这是一个编译时检查,因此它将在任何 iOS 版本上创建相同的行为。由于部署目标小于 4.0,因此 if 语句中的代码不会在任何设备上运行。

如果您想要您描述的行为,您需要进行运行时检查。您可以在链接的主题中看到如何执行此操作的示例。

【讨论】:

好吧,这是有道理的。我想知道它如何以其他方式工作。

以上是关于何时使用“#if __IPHONE_OS_VERSION_MIN_REQUIRED > x”?的主要内容,如果未能解决你的问题,请参考以下文章

何时使用,何时不使用 Try Catch Final

何时使用 Storyboard 以及何时使用 XIB

何时使用 GetXXX() 方法以及何时使用 Getter 属性

Vuex - 何时使用 getter 以及何时使用状态

何时使用 .First 以及何时将 .FirstOrDefault 与 LINQ 一起使用?

何时使用 OSGi EventAdmin,何时不使用?