编辑:
下面来自 H2CO3 的答案让我几乎很高兴。但这并没有解释一件事:为什么在针对 SDK6 构建应用程序时会出现运行时异常(UIPageViewController 在将其添加到父控制器之前需要一个子控制器),但在针对 SDK5 构建应用程序时却没有?Rolf 的回答解释了发生了什么:设备知道构建应用程序所使用的 SDK,并且行为不同以确保最大的兼容性。
在与 iOS SDK 版本、MonoTouch 版本和不同的 iOS 版本作斗争时,我开始想:到底什么是 iOS SDK?
我的意思是,我安装 Xcode 4.4 并获得 iOS SDK 5。如果我安装 Xcode 4.5,我将获得 iOS SDK 6。到目前为止没问题。
- 现在假设我构建了一个应用程序
targets iOS 5
并做not use any iOS 6 specific
一些事情。我只是构建这个应用程序using iOS SDK 6
。 - 然后我建立
same app
但使用iOS SDK 5
.
然后我在 iOS 6 设备上运行这两个版本的应用程序。
为什么他们的行为不同?有一些小的差异,例如,如果在将页面视图控制器作为子控制器添加到父控制器之前没有设置子控制器,则 UIPageViewController 会引发异常。
据我了解,回调、功能和一切都来自 iOS 操作系统,而不是来自 SDK。但操作系统在这两种情况下都是相同的。
我完全明白,如果我想使用 iOS 6 的特定功能,我需要使用 iOS SDK 6,因为 UICollectionView 在 SDK 5 中不存在。但是这个视图的 UI 代码显然没有包含在我的应用程序中,否则它也可以在 iOS5 上运行。所以集合视图来自操作系统提供的共享库。
最重要的是,还有 MonoTouch。如果我们假设每个 MonoTouch 版本只不过是绑定的扩展而不修复任何错误,那么我使用的 MT 版本应该无关紧要。
我的问题的简短回顾是:iOS 版本、iOS SDK 版本、MonoTouch 版本和应用程序的目标版本如何协同工作?