iOS 从零开始使用 Swift系列:
探索 iOS SDK
探索 Foundation 框架
使用 UIKit 的第一步
自动布局基础
表格视图基础
导航控制器和视图控制器层次结构
iOS 上的数据持久性和沙盒
构建购物清单应用程序 1
构建购物清单应用程序 2
下一步该去哪里
在开发原生 iOS 应用程序时,对 iOS SDK 的良好理解是关键。它不仅可以帮助您选择正确的工具来解决特定问题,还可以确保您不会迷失在 SDK 中包含的数十个框架中。在本文中,我们将深入了解 iOS 架构,并找出 iOS 应用程序背后的驱动力。
什么是 iOS SDK?
我敢肯定,即使是一些经验丰富的 iOS 开发人员,也很难用一句话来定义 iOS SDK。首字母缩写词 SDK 代表 软件开发工具包。iOS SDK 包含开发原生 iOS 应用程序的工具和资源,这意味着 SDK 使开发人员能够在模拟器和物理设备上开发、安装、运行和测试应用程序。
支持原生 iOS 应用程序的两个驱动力是 Swift(或 Objective-C)和原生 iOS 系统框架。在之前的文章中,我们探索了 Swift 编程语言。在本文中,我想探索支持原生 iOS 应用程序的框架。
这包括高级框架,例如 UIKit 和 Map Kit 框架,也包括与硬件紧密相关的框架,例如 Accelerate 和 Core Location 框架。
什么是原生 iOS 应用程序?
您现在知道什么是 iOS SDK,但是是什么让应用程序有资格成为原生 iOS 应用程序?简单的答案是 iOS 应用程序是在 iOS 设备上运行的应用程序。不过,这只是事实的一半。在 Safari 中运行的 Web 应用程序呢?
iOS 应用程序是为 iOS 平台开发的 Cocoa 应用程序。伟大的。什么是 Cocoa 应用程序?Cocoa 应用程序有点难以定义。它是编写应用程序的语言吗?并不真地。它是构建 Cocoa 应用程序的工具吗?不,可以在没有 Xcode 的帮助下开发 Cocoa 应用程序。
Apple 将 Cocoa 应用程序定义为由对象组成的应用程序,这些对象最终继承自 FoundationNSObject
框架中声明的根类,并且与 Objective-C 运行时紧密集成。
在本文中,我想重点介绍用于创建原生 iOS 应用程序的框架。如果您有兴趣了解更多有关 Swift 也使用的 Objective-C 运行时的信息,我建议您查看 Apple 的 Objective-C 运行时参考 或阅读 Objective-C 运行时编程指南。
Foundation 框架提供了第二个根类, NSProxy
. 但是,您很少(如果有的话)在您的任何项目中使用它。
iOS 架构
与在 Safari 中运行的 Web 应用程序的另一个区别是,本机应用程序直接与 iOS 操作系统和 iOS 的本机系统框架交互。操作系统充当应用程序和底层硬件之间的中介。这种中介或抽象的一个关键优势是本机应用程序无需担心未来的硬件更改或设备规范。
操作系统为本地应用程序提供有关硬件功能(设备是否有摄像头?)和设备规格(应用程序是在 iPhone 还是 iPad 上运行?)的必要信息。
iOS 架构可以分为四个不同的层:
- Cocoa Touch
- Media
- Core Services
- Core OS
- 可可触摸
- 媒体
- 核心服务
- 核心操作系统
这种分层架构说明了该抽象级别,较高级别的层更抽象,而较低级别的层更基础,与硬件密切相关。不言而喻,较高层的某些功能依赖于较低层。
Apple 建议尽可能使用高级框架,因为它们通常是低级框架的面向对象的抽象。换句话说,较高层通过较低层与硬件间接交互,较低层本质上更复杂。当然,如果较高级别的框架不能满足您的需求,仍然可以退回到较低级别的框架。
提醒一下,框架是一个包含动态共享库和与之关联的资源的目录,例如头文件、图像等。框架是各种系统接口的访问点,例如 iOS 通讯录、设备的相机胶卷和音乐库。
Cocoa Touch可可触摸层
在上一篇文章中,我写了关于 Cocoa Touch 及其与 Swift 和 Objective-C 的关系。在这篇文章中,我想从更实用的角度来讨论 Cocoa Touch。应用程序如何依赖 Cocoa Touch 层?Cocoa Touch 在 iOS 架构中的作用是什么?
Cocoa Touch 层是 iOS 架构的最顶层。它包含一些原生 iOS 应用程序所依赖的关键框架,其中最突出的是 UIKit 框架。
Cocoa Touch 层定义了基本的应用程序基础结构并提供了许多重要的技术,例如多任务处理和基于触摸的输入。
正如我所提到的,iOS 应用程序严重依赖 UIKit 框架。如果原生 iOS 应用程序没有与 UIKit 和 Foundation 框架链接,它们将无法运行。
UIKit 框架,或简称 UIKit,是为 iOS 平台量身定做的。OS X 平台有一个等效的框架,即 Application Kit 框架或 AppKit。UIKit 为图形化、事件驱动的 iOS 应用程序提供了基础设施。它还处理特定于 iOS 平台的其他核心方面,例如多任务处理、推送通知和可访问性。
Cocoa Touch 层为开发人员提供了大量高级功能,例如自动布局、打印、手势识别器和文档支持。除了 UIKit,它还包含 Map Kit、Event Kit 和 Message UI 框架等。
有关 Cocoa Touch 层的所有框架的完整列表,我想参考 Apple 的 iOS 技术概述 指南。广告
Media媒体层
图形、音频和视频由媒体层处理。该层包含多项关键技术,例如Core Graphics、OpenGL ES 和OpenAL、AV Foundation 和Core Media。
媒体层包含大量框架,包括用于访问存储在设备上的照片和视频的 Assets Library 框架、用于通过过滤器进行图像处理的 Core Image 框架以及用于 2D 绘图的 Core Graphics 框架。
查看 Apple 的 iOS 技术概述 指南,了解媒体层所有框架的完整列表。
Core Services核心服务层
核心服务层负责管理原生 iOS 应用程序使用的基础系统服务。Cocoa Touch 层的某些功能依赖于核心服务层。核心服务层还提供了一些不可或缺的功能,例如块对象、Grand Central Dispatch、In-App Purchase 和 iCloud Storage。
核心服务层最受欢迎的新增功能之一是 ARC 或 自动引用计数。ARC 是编译器级别的功能,于 2011 年与 iOS 5 一起推出。ARC 简化了 Objective-C 中的内存管理过程。
内存管理是我们在本系列中没有涉及的主题,但是在开发 Cocoa 应用程序时了解内存管理的基础知识很重要。自动引用计数是一个很好的补充,但重要的是你知道 ARC 正在为你做什么。
您可以在Programming with Objective-C中阅读有关内存管理的更多信息 ,我强烈建议您这样做。
Foundation 框架,或简称 Foundation,是 iOS 和 OS X 应用程序的另一个重要框架。在下一篇文章中,我们将更详细地探讨这个框架。Foundation 框架不仅仅是有用类的集合,例如 NSArray
、 NSDictionary
和 NSDate
。
Foundation 提供了 NSObject
根类,它为 Objective-C 运行时提供了一个基本接口,它还引入了几个范例,例如对象所有权的策略。与 Core Foundation(见下文)一样,Foundation 使不同的库和框架可以轻松地共享数据和代码。
Core Services 层的另一个重要框架,与 Foundation 框架密切相关,是基于 C 语言的 Core Foundation 框架,简称 Core Foundation。与 Foundation 框架一样,它使各种库和框架能够共享数据和代码。
Core Foundation 有一个称为 toll-free bridging的特性,它可以在函数参数中用 Cocoa 对象替换 Core Foundation 对象,反之亦然。
有关核心服务层所有框架的完整列表,我想参考 iOS 技术概述 指南。
Core OS核心操作系统层
三个较高层提供的大部分功能都建立在 Core OS 层及其低层特性之上。Core OS 层提供了一些您的应用程序可以直接使用的框架,例如 Accelerate 和 Security 框架。
出于明显的安全原因,Core OS 层还封装了您的应用程序无法访问的内核环境和低级 UNIX 接口。但是,通过基于 C 的 libSystem 库可以直接访问许多低级功能,例如 BSD 套接字、POSIX 线程和 DNS 服务。
文档
开发原生 iOS 应用程序时,您最亲密的盟友是与 iOS SDK 捆绑在一起的文档。在大多数情况下,文档非常出色,它将帮助您轻松掌握新技术或框架。
尽管文档可以在线获得,但大多数开发人员使用 Xcode 中包含的文档浏览器。在 Xcode 7 中,您可以通过从 Xcode 的 Window 菜单中选择Documentation and API Reference 来找到文档浏览器 。
由于您将广泛使用文档,因此您可能需要学习一些快捷方式来在文档中找到您要查找的内容。正如我在上一段中提到的,文档浏览器提供了对文档的轻松访问。要快速访问文档,请 在 Xcode 中按Command + Shift + 0 。
在开发过程中,每次需要查找符号(例如类、方法或结构)时,在代码编辑器和文档浏览器之间来回切换会很快变得很麻烦。
有两种解决方案可以有效地浏览文档。每当您将光标放在 Xcode 代码编辑器中的类或方法名称上时,右侧边栏中的 快速帮助检查器都会 显示相应符号的摘要。摘要包含几个有用的链接,可将您带到文档浏览器。
因为我在代码编辑器中工作时通常会隐藏右侧边栏,所以我使用另一种方法来显示类或方法的文档。每当您按下 Option 键并将鼠标悬停在某个符号上时,光标就会变为问号并且该符号会突出显示。
通过单击带有问号的符号,会弹出一个新窗口,其中包含与 Quick Help Inspector相同的摘要。单击窗口中的链接之一会将您带到文档浏览器。这是在代码编辑器和文档浏览器之间切换的一种快速便捷的方式,尤其是在使用两个监视器时。
结论
您现在应该对 iOS SDK 和 iOS 架构的各个层有了很好的了解。iOS 应用程序的两个核心框架 UIKit 和 Foundation 是本系列接下来两部分的重点。
这些框架不仅对于每个 iOS 应用程序都是必不可少的,它们还包含几十个类,您会发现自己在开发原生 iOS 应用程序时经常使用这些类。
ios-from-scratch-with-swift-exploring-the-ios-sdk–cms-25154