第七章数据库
虽然说不使用系统框架也能编写 Objective-C 代码,但几乎没人这么作。即使是NSObject 这个标准的根类,也属于 Foundation 框架,而非语言自己。若不使用 Foundation ,就必须本身编写根类,同时还要本身来写 collection、事件循环,以及其余会用到的类。此外,若不用系统框架,也就没法使用 Objective-C 来开发 Mac OS X 及 iOS 应用程序了。系统框架很强大,不过它是历经多年研发才成了今天这个样子的。所以,里面也许会有不合时宜并且用起来很蹩脚的地方,但也会有遗失的珍宝藏于其间。编程
本条要点:(做者总结)网络
编写 Objective-C 应用程序时几乎都会用到系统框架,其中提供了许多编程中常用的类,好比 collection。如果不了解系统框架所提供的内容,那么就可能会把其中已经实现过的东西又重写一遍。用户升级操做系统后,你所开发的应用程序也可使用最新版的系统库了。因此说,若是直接使用这些框架中的类,那么应用程序就能够得益于新版系统库所带来的改进,而开发者也就无须手动更新其代码了。数据结构
将一系列代码封装为动态库(dynamic library),并在其中放入描述其接口的头文件,这样作出来的东西就叫框架。有时为 iOS 平台构建的第三方框架所使用的是静态库(static library),这是由于iOS 应用程序不容许在其中包含动态库。这些东西严格来说并非真正的框架。然而也常常视为框架。不过,全部iOS 平台的系统框架仍然使用动态库。架构
在为 Mac OS X 或 iOS 系统开发“带图形界面的应用程序”(graphical application)时,会用到名为 Cocoa 的框架,在 iOS 上称为 Cocoa Touch。其实 Cocoa 自己并非框架,可是里面集成了一批建立应用程序时常常会用到的框架。app
开发者会碰到的主要框架就是 Foundation,就是 NSObject、NSArray、NSDictionary 等类都在其中。Foundation 框架中的类,使用 NS 这个前缀,此前缀是在 Objective-C 语言用做 NeXTSTEP 操做系统的编程语言时首度肯定的。Foundation 框架真可谓全部 Objective-C 应用程序的“基础”,如果没有它,那么本书大部份内容就不知所云了。框架
Foundation 框架不只提供了 collection 等基础核心功能,并且还提供了字符串处理这样的复杂功能。比方说,NSLinguisticTagger 能够解析字符串并找到其中的所有名词、动词、代词等。简言之,Foundation 所提供的功能远远不止那几个基础类。socket
还有个与 Foundation 相伴的框架,叫作 CoreFoundation。虽然从技术上讲,CoreFoundation 框架不是 Objective-C 框架,但它倒是编写 Objective-C 应用程序时所应熟悉的重要框架,Foundation 框架中有许多功能,均可以在此框架中找到对应的 C 语言API。coreFoundation 与 Foundation 不只名字类似,并且还有更为紧密的联系。有个功能叫作 “无缝桥接” (toll-free bridging),能够把CoreFoundation 中的C语言数据结构平滑转换为 Foundation 中的 Objective-C 对象,也能够反向转换。比方说,Foundation 框架中的字符串是 NSString ,而它能够转换为 CoreFoundation 里与之等效的 CFString 对象。无缝桥接技术是用某些至关复杂的代码实现出来的,这些代码可使运行期系统把 CoreFoundation 框架中的对象视为普通的Objective-C 对象。可是,像无缝桥接这么复杂的技术,想本身编写代码实现它,可不太容易。开发程序时可使用此功能,但若决定以手工编码的方式来复制这套机制,则须要认真审视本身的想法了。编程语言
除了 Foundation 与 CoreFoundation 以外,还有不少系统库,其中包括但不限于下面列出的这些:函数
除此以外,还有别的框架,然而经过此处列出的这几个框架,能够看出Objective-C 编程的一项重要特色,那就是:常常须要使用底层的 C 语言级 API。用 C 语言来实现 API 的好处是,能够绕过 Objective-C 的运行期系统,从而提高执行速度。固然,因为ARC 只负责 Objective-C 的对象,因此使用这些 API 时尤为须要注意内存管理问题。若想使用这种框架,必定得先熟悉 C 语言基础才行。
读者可能会编写使用 UI 框架的 Mac OS X 或 iOS 应用程序。这两个平台的核心UI 框架分别叫作 AppKit 及 UIKit ,它们都提供了构建在 Foundation 与 CoreFoundation 之上的 Objective-C 类。框架里含有 UI 元素,也含有粘合机制,令开发者可将全部有关内容组装为应用程序。在这些主要的 UI 框架之下,是 CoreAnimation 与 CoreGraphics 框架。
CoreAnimation 是用 Objective-C 语言写成的,它提供了一些工具,而 UI 框架则用这些工具来渲染图形并播放动画。开发者编程时可能历来不回深刻到这种级别,不过知道该框架老是好的。CoreAnimation 自己并非框架,它是 QuartzCore 框架的一部分。然而在框架的国度里,CoreAnimation 仍应算做 “一等公民”(first-class citizen)。
CoreGraphics 框架以 C 语言写成,其中提供了 2D 渲染所必备的数据结构与函数。例如,其中定义了CGPoint、CGSize、CGRect 等数据结构,而 UIKit 框架中的 UIView 类在肯定视图控件之间的相对位置时,这些数据结构都要用到。
还有不少框架构建在 UI 框架之上,比方说 MapKit 框架,它能够为 iOS 程序提供地图功能。又好比 Social 框架,它为 Mac OS X 及 iOS 程序提供了社交网络(social networking)功能。开发者一般会将这些框架与操做系统平台所对应的核心 UI 框架结合起来使用。
总的来讲,许多框架都是安装 Mac OS X 与 iOS 系统时的标准配置。因此,在打算编写新的工具类以前,最好在系统框架里搜一下,一般都有写好的类可供直接使用。
END