如果 Apple 的多个框架跨越每一层,为什么这个 iOS 层图像按此顺序堆叠?

If Apple's multiple frameworks span across each of these layers, why is this iOS layers image stacked in this order?

在研究 iOS 时,我看到这张图片被讲师多次提及,但是 Apple frameworks list 显示的好像您可以自由选择框架或 类 你想实现而不必深入每一层来使用特定的功能。例如,我的印象是,为了使用蓝牙服务,我需要从 UIKit 对象(如 UIButton)开始,并在允许使用蓝牙功能之前利用每一层的对象,但这似乎不是构建应用程序时的过程。所以我的问题是为什么这张图片如此重要,或者它试图传达关于 Apple 提供的多个框架的什么信息?

扩展@Baglan 的评论:每个 "layer" 是一个抽象级别,但 none 是综合级别,您可以随意在抽象阶梯上上下移动.

层添加抽象

是的,没有包含蓝牙连接的 UIKit API(或最高 "layer" 上的其他 API)。但那是因为蓝牙本身是一种较低级别的技术。 UIKit 没有任何用处,它提供了一个 API,在概念上与 CoreBluetooth 提供的相同。

另一方面,UIKit 和其他高级框架所做的是在存在此类抽象用例的基础技术中提供进一步的抽象。因此,即使 Apple Pencil 和 Siri Remote(适用于 Apple TV)使用蓝牙,UIKit 提供的 APIs 可以抽象出蓝牙的细节,让您以更友好的方式使用这些设备与您的用户和应用的其余部分相关。

层次不全面

因此,如果您只想谈论蓝牙,请使用 CoreBluetooth 框架。如果您只想处理音频,请使用 CoreAudio 框架等。

拥有抽象层并不意味着您必须包装并推动所有这些层才能获得您需要的东西——这意味着您可以下降到您想要执行的工作的任何抽象级别。

I was under the impression that in order to use blue tooth services I needed to start with a UIKit object such as UIButton and utilize an object from each layer

从某种意义上说,你的印象其实是正确的。 iOS 应用程序需要某种形式的 UI,而 UIKit 正是实现这一目标的地方。所以你从视图和按钮开始,你为响应按钮按下等事情编写的代码可以根据手头任务的需要使用来自较低层的对象。

"Layers" 只是一个可能的路线图

此外,"layers"的思想本身就是一种抽象。 Apple 平台上有超过 100 个开发人员可访问的框架,有助于以某种方式在有用的集群中考虑它们。 Apple 倾向于使用的方案通常依赖于这种抽象层的想法。

但是这样的方案不止一种。例如,查看 https://developer.apple.com/reference/ 的框架列表——在这里你会发现六个集群,它们将 "layers" 比喻与一些更面向任务的想法混合在一起:应用程序框架、图形和游戏、应用程序服务、媒体和 Web、开发人员工具和系统。值得注意的是,"App Frameworks" 不仅仅是 "high level" 东西 — UIKit、Foundation、and/or Swift Standard Library 一起是每个人都需要制作的基本工具一个应用程序,所有其他集群用于更具体(或更低级别)的任务。