Cocoa 框架
接下来的段落总结了 Cocoa 的类和一些重要的框架的示意图,特别是核心框架 Foundation (基础)和 Application Kit (应用程序工具箱)。
内容:
介绍
基础框架
应用程序工具箱
其它 Cocoa API 框架
介绍
是什么使得一个程序变成了一个 Cocoa 的程序?它其实不是编程语言,因为您可以在 Cocoa 开发中使用一些不同的语言。它也不是开发工具,因为您可以在命令行中(尽管这会是一个非常复杂和耗时的工作)创建一个 Cocoa 应用程序。所有 Cocoa 应用程序的共性(也就是使得它们与众不同的东西)是它们都由一些最终从根类, NSObject ,继承而来的对象组成,而 NSObject 最终基于 Objective-C 运行时间。这个解释对于所有的 Cocoa 框架同样正确。
注意 : 这个解释还需要做一点点澄清。首先, Cocoa 提供了另外一个根类, NSProxy ;但是, NSProxy 在 Cocoa 编程里很少被用到。其次,您也可以创建您自己的根类,但是这将是很大量的工作(需要您编写代码与 Objective-C 运行时间相交互),结果是可能得不偿失。
Mac OS X 包含了几个 Cocoa 框架,并且苹果和其它第三方开发商一直在发布更多的框架。尽管 Cocoa 框架有很多,有两个与其它的有很大的区别。基础( Foundation )和应用程序工具箱( Application Kit )是 Cocoa 的核心框架。您除非链接应用程序工具箱(以及使用它的类),否则您不能开发一个 Cocoa 应用程序。你也不可能开发 Cocoa 任何类型的软件,除非您链接基础框架或者使用它的类。(链接这些框架是当您在链接 Cocoa 伞状框架时自动完成的)。基础和应用程序工具箱框架是 Cocoa 开发的基础,所有其它的框架都是次要的和可选的。
接下来的章节考察了这两个核心 Cocoa 框架的功能和类,并且简要描述了一些次要的框架。为了使得这些大的框架更加容易被掌握,对于基础和应用程序工具箱框架的介绍会按照功能组的体系分割为几十个类。尽管这些功能组有很深的逻辑基础,您可以按照其它方式把这些类分组。
基础框架
基础框架定义了一个类的基础层,这些类可以被任何类型的 Cocoa 程序所使用。区分基础框架和应用程序工具箱的类的标准是用户界面。如果一个对象既不出现在一个用户界面里,也不特意的被用来支持一个用户界面,那么它的类就属于基础框架。您可以仅使用基础框架创建 Cocoa 程序;这些程序可能是命令行工具和因特网服务器。
基础框架设计的初衷是:
* 定义基础对象行为以及为例如内存管理,对象易变性和通知引进一致的约定。
* 使用包技术和 Unicode 字符串支持国际化和本地化技术。
* 支持对象持续。
* 支持对象分发。
* 提供一些操作系统独立的方法来支持可移植性。
* 为编程基元提供对象包装或者等同物,例如数字数值,字符串以及集合。同时来包含了工具类用于调用底层系统实体和服务,例如端口,线程和文件系统等。
Cocoa 应用程序,由链接应用程序工具箱而定义,不可避免的也要链接基础框架。类的继承共享了同一个根类, NSObject ,而且许多应用程序工具箱的方法和函数使用基础框架对象作为参数或者返回值。一些基础框架类可能看起来像是为应用程序设计的,例如 NSUndoManager 和 NSUserDefaults ,但是它们包含在基础框架里,因为他们可以用在不涉及用户界面的地方。
基础框架范例和规则
基础框架为 Cocoa 编程引进了几个范例和规则来保证一致的表现和在一些特定情况下程序中的对象之间的期待结果。包括:
* 对象拥有权和对象处理。不是使用一种自动的垃圾回收机制,基础框架实行了一种对象拥有权的规则,这个规则定义对象负责释放其它的它们创建的,拷贝的或者明确保留的对象。 NSObject (类和协议)定义了保留和释放对象的方法。自动释放池(定义了 NSAutoreleasePool 类)实现了一个延时释放的机制,从而使得 Cocoa 程序拥有了一个返回那些调用者不再负责任的对象的一致的约定。要获得更多关于对象拥有权和处理相关的信息,请参考内存管理。
* 可变类的变体。许多基础框架的数值类和容器类拥有一个不可变类的可变的变体,而这个可变类始终是不可变类的一个子类。如果您需要动态的改变这样的一个对象的封装的数值或者成员,您要创建可变类的一个实例。由于它是从不可变类继承而来,您可以在不可变类型的方法中传递可变的实例。
* 类簇。一个类簇是一个抽象类和一套私有具体的子类,抽象类表现为具体子类的伞状接口。依赖于上下文(特别是您用来创建对象的方法),一个适当优化过的类的实例会返还给您。例如 NSString 和 NSMutableString ,充当为为不同类型的存储需求而优化的多种私有子类实例的经纪人。经过若干年,整套的具体类已经改变了几次,但是应用程序并没有被破坏。
* 通知。通知是 Cocoa 中一个主要的设计模式。它基于一个广播的机制,允许对象(被称为观察者)被一直通知其它的对象正在做什么或者在用户和系统事件里遇到了什么。通知的的发起对象可以不知道通知的观察者的存在或者身份。有几种通知的类型:同步的,非同步的以及分布的。基础框架通知机制由 NSNotification , NSNotificationCenter , NSNotificationQueue 和 NSDistributedNotificationCenter 类实现。要获得更多关于通知的信息,请参考“通知”。
基础框架类
基础框架类的继承关系开始于 NSObject 类,它(与 NSObject 和 NSCopying 协议一起)定义了基础对象属性和行为。要获得更多关于 NSObject 和基础对象行为的信息,请参考“根类”。
其余的基础框架内容包括及格相关的类的组以及一些单独的类。有代表基础的数据类型例如字符串和字节数组的类,排序其它对象的集合类,代表系统信息如日期的类,还有代表系统实体如端口,线程和进程的类。在图 4-1 ,图 4-2 ,图 4-3 中的类继承关系表里描述了这些类组成的逻辑组以及它们之间的继承关系。
图 4-1基础框架类继承关系- Objective-C (第一部分)
Figure 4-1 The Foundation class hierarchy—Objective-C (part one)
图 4-2基础框架类继承关系- Objective-C (第二部分)
Figure 4-2 Foundation class hierarchy—Objective-C (part two)
图 4-3基础框架类继承关系- Objective-C (第三部分)
Figure 4-3 Foundation class hierarchy—Objective-C (part three)
这些图示逻辑上把基础框架的类按以下分类分为不同的组(并且指出其它关联):
* 数值对象。数值对象封装不同类型的数据,提供数据的存取和数值的不同的操作方法。由于它们是对象,它们(以及它们所包含的数值)可以被存档和分发。 NSData 为字节流提供了面对对象的存储,而 NSValue 和 NSNumber 则为简单的向量数值的数组提供了面对对象的存储。 NSDate , NSCalendarDate 和 NSTimeZone 类存储时间和日期。它们提供了用于计算日期和时间差异,用于以很多中格式显示日期和时间,以及用于根据在世界所处不同位置调整时间和日期的方法。
* 字符串。 NSString 是另外一种类型的数值对象,它为使用一种特定编码的以空字符结尾的字节数组提供了面对对象的存储。它支持在 UTF-16 , UTF-8 , MacRoman 和许多其它编码之间转换字符串的编码。 NSString 还提供了方法用于搜索,合并和比较字符串,以及操作文件系统路径。您可以使用法 NSScanner 对象来从一个 NSString 对象接收数字和单词。 NSCharacterSet (在图示里显示为一个结合类)代表一组被多个 NSString 和 NSScanner 方法使用的字符。
* 集合。集合是一些对象,它们以一种特定的顺序方案存储和声明其它(通常是数值)对象。 NSArray 使用基于零的索引, NSDictionary 使用关键数值对, NSSet 提供了对象的非顺序存储( NSCountedSet 使得集合与众不同)。通过使用 NSEnumerator 对象,您可以顺序存取一个集合的元素。集合对象是特性列表的重要组件,而且象其它所有对象一样,可以被存档和分发。
* 操作系统服务。许多基础框架类方便您存取各种操作系统底层一些的服务,而且同时,把您从操作系统特质隔离开来。例如, NSProcessInfo 允许您查询一个应用程序运行所处的环境, NSHost 产生一个网络上的主机系统的名称和地址。您可以使用一个 NSTimer 对象按照固定的时间间隔发送一个信息给其它的对象,而 NSRunLoop 允许您管理一个应用程序或者其它类型的程序的输入资源。 NSUserDefaults 为一个全局(每个主机)和每个用户缺省数值(预置)系统数据库提供了一个编程的接口。
o 文件系统和 URL 。 NSFileManager 提供了一个一致的界面用于文件操作,如创建,改名,删除和移动文件。 NSFileHandle 允许在一个更底的层次操作文件(例如,在一个文件里搜索)。 NSBundle 查找存储在包里面的资源,并且能够动态的装载一些资源(例如, nib 文件和代码)。您可以使用 NSURL 和 NSURLHandle 来代表,存储和管理数据的 URL 资源。
o 进程间通讯。在这个分类里面的绝大多数类代表各种类型的系统端口,套接口和名称服务器,它们非常有助于实现底层 IPC 。 NSPipe 代表一个 BSD 管道,一个在进程之间的单向通讯通道。
o 线程和子任务。 NSThread 允许您创建多线程程序,同时各种锁类提供了通过竞争线程来控制进程资源的存取的机制。通过使用 NSTask ,您的程序可以把一个子进程分支出去执行任务并且监视它的进展。
* 通知。请参考通知类的总结“ 基础框架范例和规则”。
* 存档和 serialization 。在这个分类里的类使得对象的分发和持续变的可能。 NSCoder 和它的子类(尤其是 NSArchiver ),与 NSCoding 协议一起通过允许类信息和数据存储在一起的方式代表了一个对象以独立架构方式包含的数据。
* Objective-C 语言服务。 NSException 和 NSAssertionHandler 提供了一个在代码中处理异常的面对对象的方法。一个 NSInvocation 对象一个 Objective-C 消息的一个静态的代表,您的程序可能保存这个消息然后用来在另外一个对象中调用一个消息。它被撤消管理器( NSUndoManager )和分布对象系统所使用。一个 NSMethodSignature 对象记录一个方法的类型信息并且在消息传递的时候使用。 NSClassDescription 是一个抽象类用于定义和查询一个类的关系和属性。
* 脚本。在这个分类里的类帮助您的应用程序相应 AppleScript 脚本和苹果事件命令。
* 分布对象。您可以使用分布对象类在同一台计算机或者网络上的不同的计算机上的进程之间通讯。这其中的两个类, NSDistantObject 和 NSProtocolChecker 拥有一个根类( NSProxy )区别与其它 Cocoa 中的根类。
* 网络。 NSNetService 和 NSNetServiceBrowser 类支持零配制网络架构,称作为 Rendezvous 。 Rendezvous 是一个强大的发布和浏览一个 IP 网络上的服务的系统。
应用程序工具箱
应用程序工具箱是一个框架,它包含了您用来实现您的图形和事件驱动的用户界面的全部对象:窗口,对话框,按钮,菜单,滚动条,文本框等等,而且这个列表还在不断增加。应用程序工具箱为您处理所有细节的部分,它可以有效的在屏幕上描画,与硬件设备和屏幕缓冲区对话,在描画之前清楚屏幕的区域,以及裁剪视图。在应用程序工具箱里的类的数量在开始可能会吓您一跳。但是,绝大多数应用程序工具箱的类是支持类,您不会直接使用到它们。您也可以选择在什么层次上使用应用程序工具箱:
* 使用 Interface Builder 去创建用户界面对象和您的应用程序控制对象之间的连接,控制对象通常是用于管理用户界面的用户自定义对象。在这种情况下,您需要做的全部就是完成您的控制类特别是实现那些类的动作和代理方法。例如,您可能需要实现一个方法在用户选择一个菜单项目时它被调用(除非这个菜单项目有一个缺省的可以接受的实现)。
* 通过编程方式控制用户界面,这样您对应用程序工具箱的类和协议要更加熟悉。例如,如果允许用户把一个图标从一个窗口里拖拽到另外一个窗口需要您对 NSDragging 协议有所了解而且要使用 NSDragging 编程。
* 通过生成 NSView 或者其它类的子类来实现您自己的对象。在生成 NSView 的子类时,您使用图像函数编写您自己的描画方法。生成子类需要您对应用程序工具箱的工作原理有更深的了解。
应用程序工具箱概览
应用程序工具箱包含超过 125 个类和协议。所有的类最终都是从基础框架的 NSObject 类继承而来。图 4-4 和图 4-5 中的一览表显示了应用程序工具箱的类的继承关系。
图 4-4 应用程序工具箱类继承关系- Objective-C (第一部分)
Figure 4-4 Application Kit class hierarchy—Objective-C (part one)
图 4-5 应用程序工具箱类继承关系- Objective-C (第二部分)
Figure 4-5 Application Kit class hierarchy—Objective-C (part two)
您可以看到,应用程序工具箱的继承关系树非常宽但是比较浅;在继承关系里最深的类离跟类只是五个父类的距离,而且绝大多数的类都比这个距离近的多。在这个继承关系树里一些主要的分支非常有趣。
应用程序工具箱里最大的分支的根是 NSResponder 类。这个类定义了响应者链,是一个响应用户事件的有序的对象列表。当用户点击鼠标按钮或者按下一个键,一个事件被产生并且沿着这个响应者链向上传递直到找到一个可以响应这个事件的对象。任何处理事件的对象必须从 NSReponder 类继承而来。应用程序工具箱核心类- NSApplication , NSWindow 和 NSView 都从 NSResponder 继承而来。
应用程序工具箱里第二大分支类从 NSCell 发展而来。关于这一组类值得一提的是它们几乎镜像了从 NSControl 继承的类,而 NSControl 从 NSView 继承而来。对于响应用户动作的用户界面对象,应用程序工具箱使用了一个架构把工作在控制对象和单元对象之间区分开来。 NSControl 和 NSCell 类以及它们的子类定义了一套常用的用户界面对象例如:按钮,滚动条以及用户可以以图形化方式控制您的应用程序的一些方面的浏览器。一个控制对象与一个或者多个实现描画和事件处理的细节的单元对象相关联。例如,一个按钮同时包括了一个 NSButton 对象和一个 NSButtonCell 对象。
这个对于功能的区别的最主要的理由是允许 NSCell 类可以被 NSControl 类重用。例如, NSMatrix 和 NSTableView 可以包含多个不同类型的 NSCell 对象。例外一个理由是更好的性能,因为单元对象对比控制对象要更为轻量级;一个具有四个单元的控件要比四个控件在做同一件事情时更少影响到性能。要获得更多关于控件和单元的信息请参考“控件和单元”。
控件和单元实现了应用程序工具箱的一个重要的设计模式:目标-动作范例。一个单元可以包含能够分辨当用户点击(或者作用与)单元的时候应该发送给一个特定对象消息的信息。当一个用户操作一个控件的时候(例如通过点击在它上面的鼠标箭头),这个控件把需要的信息从它的单元分离开然后发送一个动作消息给目标对象。目标-动作允许您通过定义目标对象和调用的方法是什么来赋予一个用户动作一定的含义。您通常使用 Interface Builder 来设置目标和动作,做法是按住 Control 键从一个控制对象拖拽关系线到您的应用程序或者其它对象。您可以在程序里面设置目标和动作。
应用程序工具箱里另外一个重要的设计模式是代理。用户界面里的许多对象,例如文本区和表格视图,定义了一个代理。一个代理就是一个对象代表被代理对象或者与它协调动作。于是它就可以把应用程序特定的逻辑交给用户界面的操作。要获得更多关于代理,目标-动作和其它应用程序工具箱范例和机制的信息,请参考“与对象通信”。
接下来的章节简要介绍了应用程序工具箱和它的类以及协议的一些功能和架构的方方面面。它按照图 4-4 和图 4-5 中的类继承关系一览表把类分组。
普通用户界面类
对于用户界面的整体上的的功能,应用程序工具箱提供了一下类:
* 全局应用程序对象。每个应用程序使用一个 NSApplication 的单一实例来控制主事件循环,跟踪应用程序的窗口和菜单,分发事件给合适的对象(也就是说,它自己或者它的一个窗口),创建顶层的自动释放池,以及接收应用程序级别事件的通知。一个 NSApplication 对象拥有一个代理(您分配的一个对象),它在应用程序启动和终止,隐藏或者被激活,应该打开用户选择的一个文件时会接到通知。通过设置应用程序对象的代理和实现代理方法,您不需要定义 NSApplication 的子类就可以自定义您的应用程序的行为。
* 窗口和视图。窗口和视图类, NSWindow 和 NSView ,也是从 NSResponder 继承而来,于是在设计上会响应用户动作。一个 NSApplication 对象维护一个 NSWindow 对象的列表-每个应用程序的窗口有一个对象-而且每个 NSWindow 对象维护一个 NSView 对象的继承关系。视图的继承关系用于描画以及处理一个窗口里的事件。一个 NSWindow 对象处理窗口级别的事件,给它的视图分发其它的事件,并且为它的视图提供一个描画的区域。一个 NSWindow 对象也拥有一个代理允许您自定义它的行为。
NSView 是在一个窗口里显示的所有对象的一个抽象类。所有实现一个描画方法的子类使用图形函数; drawRect: 是您在创建一个新的 NSView 类时主要的需要覆盖的方法。
* 面板(对话框)。 NSPanel 类是 NSWindow 的一个子类,您使用它来显示临时的,全局的,或者紧急的信息。例如,您应该使用一个 NSPanel 的实例而不是一个 NSWindow 的实例来显示出错信息或者询问用户对于值得注意的或者不寻常的环境的反应。应用程序工具箱为您实现了一些常用的对话框例如存储,打开和打印对话框,它们用于存储,打开和打印文档。使用这些对话框赋予用户一个在整个应用程序的常用操作中连贯的外观和体验。
* 菜单和光标。 NSMenu , NSMenuItem 和 NSCursor 类定义了应用程序显示给用户的菜单和光标的外观和行为。
* 分组及滚动视图。 NSBox , NSScrollView 和 NSSplitView 类为窗口中的其它视图对象或者视图集合提供了图形助理。使用 NSBox 类,您可以分组窗口里的元素以及环绕整个组描画一个边界。 NSSplitView 类帮助您在垂直和水平方向扩展视图,给每个视图分配一定数量的公共领地;一个滚动控制条帮助用户在视图间重新分配领地。 NSScrollView 类和它的帮助类, NSClipView ,提供了一个滚动的机制以及帮助用户初始化和控制一个滚动的图形对象。 NSRulerView 类允许您给一个滚动视图添加一个标尺和多个标记。
* 表格和大纲视图。 NSTableView 类在行和列里显示数据。 NSTableView 非常理想用于,但是不局限与,显示数据库记录,行对应于每个记录而列则包含了记录的属性。用户可以编辑单个的单元并且重新排列列。您通过设置代理和数据源对象来控制一个 NSTableView 对象的行为和内容。大纲视图( NSOutlineView 的实例,是 NSTableView 的一个子类)提供了另外一种方法来显示列表数据。使用 NSBrowser 类您可以创建一个对象,而用户使用这个对象可以显示和浏览继承关系数据。
文本和字体
NSTextField 类实现了一个简单的可编辑的文本输入字段,而 NSTextView 类为更大的文本正体提供了更加全面的编辑功能。
NSTextView , NSText 抽象类的一个子类,定义了扩展文本系统的接口。 NSTextView 支持多信息文本,附件(图形,文件和其它),输入管理和键绑定,以及标识的文本属性。 NSTextView 处理字体窗口和字体菜单,标尺和段落风格,服务工具,以及粘贴板(剪贴板)。 NSTextView 还允许自定义代理和通知-您很少需要创建 NSTextView 的子类。您也几乎不在程序里创建 NSTextView 的实例,因为 Interface Builder 模版里的对象,例如 NSTextField , NSForm ,和 NSScrollView ,已经包含了 NSTextView 对象。
使用 NSTextStorage , NSLayoutManager , NSTextContainer 和相关的类也可以做更加强大和更有创造性的文本操作(例如把文本以圆圈的样子显示)。
NSFont 和 NSFontManager 类封装并且管理字体家族,尺寸,和变体。 NSFont 类为每个独特的字体定义一个单独的对象;处于效率的考虑,这些可以代表大量数据的对象被您的应用程序里的全部对象共享。 NSFontPanel 类定义了呈现给用户的字体窗口。
图形和颜色
类 NSImage 和 NSImageRep 封装了图形数据,允许您轻松高效的存取保存在磁盘上文件里的图像并且把图像显示在屏幕上。 NSImageRep 每一个子类都知道怎样从一个特定类型的源数据描画一个图像。 NSImage 类提供了同一个图像的多个代表,而且提供了例如缓存等行为。
颜色是通过 NSColor , NSColorPanel , NSColorList , NSColorPicker 和 NSColorWell 类来支持的。 NSColor 支持一套丰富的颜色格式和代表,包括用户自定义的。其它的类绝大多数是界面类:它们定义并呈现面板和视图允许用户去选择和应用颜色。例如,用户可以从颜色窗口里拖拽颜色到任意的颜色井里。 NSColorPicking 协议帮助您扩展标准颜色窗口。
NSGraphicsContext , NSBezierPath 和 NSAffineTransform 类帮助您使用向量描画并且支持缩放,旋转和转换等图形变换。
打印和传真
NSPrinter , NSPrintPanel , NSPageLayout 和 NSPrintInfo 类共同提供打印和传真那些显示在您的应用程序的窗口和视图里的信息的方法。您也可以创建一个 NSView 的 PDF 代表。
文档和文件系统支持
使用 NSFileWrapper 类去创建对应于磁盘上文件和目录的对象。 NSFileWrapper 把文件的内容保存在内存中,这样这些内容就可以被显示,修改或者发送给其它应用程序。它还提供了一个图标用于拖拽文件或者把文件显示为一个附件。或者使用基础框架里的 NSFileManager 类去存取和枚举文件和目录内容。 NSOpenPanel 和 NSSavePanel 类也提供了一个文件系统的方便和熟悉的用户界面。
NSDocumentController , NSDocument 和 NSWindowController 类为创建基于文档的应用程序定义了一个架构。( NSWindowController 类在类继承关系表里的用户界面类组里)。这些应用程序可以生成包含方式相同但是构成方式独特的数据集,并且能够把数据保存在文件里。这些应用程序具有或者很容易获得存储,打开,恢复,关闭和管理这些文档的能力。
国际化和字符输入支持
如果一个应用程序要在世界上超过一个地区使用,它的的资源就需要为语言,国家或者文化地区自定义或者本地化。例如,一个应用程序可能需要拥有不同的日本语,英语,法语和德语版本的字符串,图标, nib 文件或者上下文帮助。一个特定语言的独有的资源文件被分组保存在包文件夹下的一个子目录里(这些子目录使用 .lproj 扩展名)。通常您使用 Interface Builder 建立本地化资源文件。请参考 NSBundle 附加和 NSBundle 类的规格去获得更多关于 Cocoa 国际化工具的信息( NSBundle 在基础框架里)。
NSInputServer 和 NSInputManager 类与 NSTextInput 协议一起允许您的应用程序存取文本输入管理系统。这个系统翻译不同的国际键盘发生的键入然后把合适的文本字符或者 Control 键事件发送给文本视图对象。(通常是文本类处理这些类而不需要您自己去处理)。
操作系统服务
下面的应用程序工具箱类为您的应用程序提供了操作系统支持:
* 与其它应用程序共享数据。 NSPasteboard 类定义了粘贴板,一个保存从您的应用程序拷贝的数据的容器,这样任何应用程序想要使用这些数据都可以得到。 NSPasteboard 实现了常见的“剪切-拷贝-粘贴”的操作。 NSServicesRequest 协议使用粘贴板通过一个注册的服务在应用程序之间交流数据。(粘贴板在用户界面里作为剪切板被实现。)
* 拖拽。您只要很少量的编程就可以在任何地点拖拽并拖放用户自定义试图对象。对象通过遵循 NSDragging... 协议成为这个拖拽机制中的一部分;可拖拽的对象遵循 NSDraggingSource 协议,并且目标对象(拖放的接收者)遵循 NSDraggingDestination 协议。应用程序工具箱隐藏了所有跟踪光标和显示被拖拽图片的细节。
* 拼写检查。 NSSpellServer 类帮助您定义一个拼写检查服务并且把这个服务提供给其它应用程序。要把您的应用程序连接到一个拼写检查服务,您需要使用 NSSpellChecker 类。 NSIgnoreMisspelledWords 和 NSChangeSpelling 协议支持拼写检查机制。
Interface Builder 支持
NSNibConnector 抽象类和它的两个具体类, NSNibControlConnector 和 NSNibOutletConnector ,代表了 Interface Builder 中的连接关系。 NSNibControlConnector 管理 Interface Builder 中的一个动作连接而 NSNibOutletConnector 管理一个 outlet 连接。
其它 Cocoa API 框架
作为 Mac OS X 标准安装的一部分, Apple 加入了几个框架(除了基础框架和应用程序工具箱以外)来展示 Cocoa 编程接口。(它们也可能展示 Carbon 或者其它类型的编程接口。)您可以使用这些第二级的框架给您的应用程序添加令人满意的功能,如果这些功能不是最基本的。一些应该提到的第二级的框架包括:
* 地址簿。这个框架为联系人和其它个人资料提供了一个中心数据库。那些使用地址簿的应用程序,例如苹果公司的 Mail 和 iChat 可以与其它的应用程序共享这些联系人信息。
* 预置面板。使用这个框架您可以创建一些您的应用程序可以动态装载的插件,使用这些插件您可以在应用程序或者系统范围内生成一个用户界面用来记录用户预置。
* 屏幕保护。屏幕保护框架帮助您创建一个屏幕效果模块,这些模块通过系统预置来装载和运行。 屏幕保护。屏幕保护框架帮助您创建一个屏幕效果模块,这些模块通过系统预置来装载和运行。
* Web 工具箱。 Web 工具箱框架提供一套核心类来在窗口里显示 web 内容,而且实现了一些功能,例如用户点击下面的链接的功能。