# 47、熟悉系统框架

框架：将一些列代码封装为动态库，并在其中放入描述其接口的头文件。

主要框架：

* `Foundation`：`NSObject`、`NSArray`、`NSDictionary`。。。（用NS前缀），还提供了`collection`等基础核心功能，还提供了字符串处理这样的复杂功能。如：NSLinguisticTagger可以解析字符串并找到其中的全名名词、动词、代词等。
* `CoreFoundation`：`Foundation`框架中许多功能，都可以在此框架中找到对应的C语言API。“无缝桥接”（toll-free bridging）功能可以把此框架中的C语言数据结构平滑转换为`Foundation`中的OC对象，也可以方向转换。

其他框架：

* `CFNetwork`：提供了C语言级别的网络通信能力，将“BSD套接字”（BSD socket）抽象成易于使用的网络接口。而Foundation则将该框架里的部分内容封装为OC语言接口，以便进行网络通信，如：`NSURLConnection`从`URL`中下载数据
* `CoreAudio`：提供C语言API可用来操作设备上的音频硬件。此框架属于比较难用的那种，因为音频处理本身就很复杂。所幸由这套API中可以抽象除另外一套OC式API，用后者来处理音频问题会简单些
* `AVFouncation`：提供OC对象可用来回放并录制音频及视频，如：在UI视图类里播放视频
* CoreData：提供OC接口可将对象放入数据库，便于持久保存。处理数据的获取及存储事宜，且可跨越Mac OS X及iOS平台
* `CoreText`：提供C语言接口可以高效执行文字排版及渲染操作

可以看出OC编程一项重要特点：经常要使用底层C语言API，好处是可以绕过OC的运行期系统，从而提升指向速度。当然ARC只负责OC对象，所以使用这些API时尤其需要注意内存管理问题。

核心UI框架：Mac OS X的是`AppKit`、iOS的是`UIKIt`，都提供了构建在`Foundaton`与`CoreFoundation`之上的OC类。

`CoreAnimation`：OC写成，提供了一些工具，UI框架用这些工具来渲染图形并播放动画。`CoreAnimation`本身不是框架，是QuartzCore框架的一部分。

`CoreGaphics`：C语言写成的框架，提供了2D渲染所必备的数据结构与函数。其中定义了：`CGPoint`、`CGSize`、`CGRect`等数据结构。

要点：

* 许多系统框架都可以直接使用。其中最重要的是`Foudation`与CoreFoundation，这两个框架提供了构建应用程序所需的许多核心功能
* 很多常见任务都能用框架来做，例如音频、视频处理、网络通信、数据管理等
* 请记住：用纯C写成的框架于用OC写成的一样重要，若想成为优秀的OC开发者，应该掌握C语言的核心概念
