Foundation类
Foundation类层次的根是NSObject
类,它(和NSObject
及NSCopying
协议一起)定义了基本的对象属性和行为。更多有关NSObject
和基本对象行为的信息请参见"根类"部分。
Foundation框架的剩余部分由几组相互关联的类和一些独立的类组成。有一些代表基本数据类型的类,如字符串、字节数组、用于存储其它对象的集合类;一些代表系统信息的类,如日期类;还有一些代表系统实体的类,比如端口、线程、和进程。图1、图2、和图3所示的类层次描述了这些类的逻辑分组及其继承关系。
图1 Foundation类层次—Objective-C(第一部分)
图2 Foundation类层次—Objective-C(第二部分)
上面这些框图按照如下范畴(和下文提到的其它关联关系)将Foundation框架中的类进行逻辑分类:
-
值对象。值对象封装了各种类型的数据,提供对数据进行访问和各种操作的途径。因为它们都是对象,所以可以对它们(和它们包含的数值)进行归档和分发。
NSData
类为字节流提供面向对象的存储空间,而NSValue
和NSNumber
类则为简单的标量值数组提供面向对象的存储空间。NSDate
、NSCalendarDate
、NSTimeZone
、NSCalendar
、NSDateComponents
、和NSLocale
类提供代表时间、日期、日历、和地域设置(locales)的对象。它们包含的方法可以用于计算日期和时间差、以各种格式显示日期和时间、以及调整世界上各个位置时间和日期。 -
字符串。
NSString
是另一类值对象,负责为以null结尾的、具有特定编码的字节数组提供面向对象的存储空间。它支持对UTF-16、UTF-8、MacRoman、和很多其它编码的字符串之间进行转换。NSString
还提供对字符串进行检索、组合、和比较、以及对文件系统路径进行操作的方法。您可以用NSScanner
对象来对NSString
对象中的数字和词进行解析。NSCharacterSet
(显示在框图中的集合类部分)代表可以在各个NSString
和NSScanner
方法中使用的一组字符。 -
集合。集合是以一定的顺序存储和访问其它对象(通常是数值)的对象。
NSArray
的索引从0开始,NSDictionary
使用键-值对,而NSSet
则负责对象的随机存储(NSCountedSet
类使集合具有唯一标识)。通过NSEnumerator
对象,您可以访问一个集合中的元素序列。集合对象是属性列表的必要元素,和其它所有对象一样,它也可以被归档和分发。 -
操作系统服务。 很多Foundation类为访问各种底层的操作系统服务提供便利,同时又把开发者从操作系统的具体特性隔离开来。举例来说,您可以通过
NSProcessInfo
类查询应用程序运行的环境;通过NSHost
类得到主机系统在网络中的名称和地址;通过NSTimer
对象,您可以按指定的时间间隔向其它对象发送消息;NSRunLoop
可以帮您管理应用程序或其它类型程序的输入源;而NSUserDefaults
则为存储全局(主机级别)和用户级缺省值(预置)的系统数据库提供编程接口。-
文件系统和URL。
NSFileManager
为诸如创建、重命名、删除、和移动文件这样的文件操作提供统一的接口。NSFileHandle则可以进行较为底层的文件操作(比如文件内查找操作)。NSBundle
可以寻找存储在程序包中的资源,可以动态装载某些资源(比如nib文件和代码)。您可以用NSURL
和NSURLHandle
类来表示、访问、和管理源于URL的数据。 -
进程间通讯。 这个范畴中的大部分类代表不同的系统端口、套接字、和名字服务器,对实现底层的IPC很有用。
NSPipe
代表一个BSD管道,即一种进程间的单向通讯通道。 -
线程和子任务。
NSThread
类使您可以创建多线程的程序,而各种锁(lock)类则为彼此竞争的线程在访问进程资源时提供各种控制机制。通过NSTask
,您的程序可以分出一个子进程来执行其它工作或进行进度监控。
-
- 通告。请见"Foundation的范式和策略"部分中的有关通告类总结。
-
表达式和条件判断。条件判断类,即
NSPredicate
、NSCompoundPredicate
、和NSComparisonPredicate
类,负责对获取或过滤对象的逻辑约束条件进行封装。NSExpression
对象则代表条件判断中的表达式。 -
Spotlight查询。
NSMetadataItem
、NSMetadataQuery
和相关的查询类对文件系统的元数据进行封装,使元数据的查询成为可能。 -
Objective-C语言服务。
NSException
和NSAssertionHandler
类为代码中的断言和例外处理提供了面向对象的封装。NSInvocation
对象是Objective-C消息的静态表示,您的程序可以对它存储,并在之后用于激活另一个对象的消息。undo管理器(NSUndoManager
)和分布式对象(Distributed Objects)系统都用到了这种对象。NSMethodSignature
对象负责记录方法的类型信息,可以用于信息的推送。NSClassDescription
则是一个抽象类,用于定义和查询类的关系和属性。 -
分布式对象。 您可以通过分布式对象类来进行同一台电脑或一个网络中的不同电脑上的进程间通讯。其中的两个类-
NSDistantObject
和NSProtocolChecker
的根类(NSProxy
)和Cocoa其它部分的根类不同。 -
网络。
NSNetService
和NSNetServiceBrowser
类支持称为Bonjour的零配置网络架构。Bonjour是在IP网络上发布和浏览服务的强大系统。