第47条:熟悉系统框架

  第七章数据库

  虽然说不使用系统框架也能编写 Objective-C 代码,但几乎没人这么作。即使是NSObject 这个标准的根类,也属于 Foundation 框架,而非语言自己。若不使用 Foundation ,就必须本身编写根类,同时还要本身来写 collection、事件循环,以及其余会用到的类。此外,若不用系统框架,也就没法使用 Objective-C 来开发 Mac OS X 及 iOS 应用程序了。系统框架很强大,不过它是历经多年研发才成了今天这个样子的。所以,里面也许会有不合时宜并且用起来很蹩脚的地方,但也会有遗失的珍宝藏于其间。编程

  本条要点:(做者总结)网络

  • 许多系统框架均可以直接使用。其中最重要的是 Foundation 与 CoreFoundation,这两个框架提供了构建应用程序所需的许多核心功能。
  • 不少常见任务都能用框架来作,例如音频与视频处理、网络通讯、数据管理等。
  • 请记住:用纯C 写成的框架与用 Objective-C 写成的同样重要,若想成为优秀的 Objective-C 开发者,应该掌握C 语言的核心概念。  

 

  编写 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 以外,还有不少系统库,其中包括但不限于下面列出的这些:函数

  • CFNetwork 此框架提供了C语言级别的网络通讯能力,它将“BSD套接字”(BSD socket)抽象成易于使用的网络接口。而 Foundation 则将该框架里的部份内容封装为 Objective-C 语言的接口,以便进行网络通讯,例如能够用 NSURLConnection 从 URL 中下载数据。
  • CoreAudio 该框架所提供的 C语言API 可用来操做设备上的音频硬件。这个框架属于比较难用的那种,由于音频处理自己就很复杂。所幸由这套API 能够抽象出另一套 Objective-C 式API,用后者来处理音频问题会更简单些。
  • AVFoundation 此框架所提供的Objective-C 对像可用来回放并录制音频及视频,好比可以在 UI 视图类里播放视频。
  • CoreData 此框架所提供的 Objective-C 接口可将对象放入数据库,以便持久保存。CoreData 会处理数据的获取及存储事宜,并且能够跨越 Mac OS X 及 iOS 平台。
  • CoreText 此框架提供的C 语言接口能够高效执行文字排版及渲染操做。

  除此以外,还有别的框架,然而经过此处列出的这几个框架,能够看出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

相关文章
相关标签/搜索