现在的位置: 首页 > 综合 > 正文

Cocoa基本原理指南之一 – Cocoa框架

2013年10月09日 ⁄ 综合 ⁄ 共 3119字 ⁄ 字号 评论关闭

摘自:Cocoa基本原理指南     

   Cocoa框架的核心是FoundationApplication Kit框架。Foundation框架定义了一些基础类,可以用于各种类型的Cocoa程序。Foundation框架和Application Kit框架的区分标准在于用户界面。

         Foundation类层次的根是NSObject类,它(和NSObjectNSCopying协议一起)定义了基本的对象属性和行为。Foundation框架的剩余部分由几组相互关联的类和一些独立的类组成。Foundation框架中的类进行逻辑分类为:值对象、字符串、集合、操作系统服务(文件系统和URL、进程间通讯、线程和子任务)、通告、归档和序列化、表达式和判断、Spotlight查询、Objective-C语言服务、脚本、分布式对象、网络。

      Application Kit框架包含实现图形的、事件驱动的用户界面需要的所有对象:窗口、对话框、按键、菜单、滚动条、文本输入框等。Application Kit由超过125个类和协议组成。所有的类最终都从Foundation框架的NSObject类继承而来。Application Kit中最大分支的根是NSResponder类,它负责定义响应者链,即对用户事件进行响应的有序对象列表。当用户进行按键或鼠标点击时,系统就会产生一个事件,并沿着响应者链向上传递,寻找可以响应该事件的对象。任何处理事件的对象都必须继承自NSResponder类。核心的Application Kit—NSApplicationNSWindow、和NSView—都继承自NSResponder

Application Kit类的第二大分支继承自NSCell类。这组类和NSControl类(继承自NSView)的派生类有大体上的映像关系。对于负责响应用户动作的用户界面对象,Application Kit采用的架构将它们的工作分为控件(control)对象和单元(cell)对象。NSControlNSCell类以及它们的子类定义了一组常见的用户界面对象,比如按键(button)、滑块(slider)、和浏览器(browser),用户可以通过图形化的操作控制应用程序的某些方面。大多数的控件对象和一个或多个单元对象相关联,单元对象负责实现描画细节和事件的处理。举例来说,一个按键是由一个NSButton对象和一个NSButtonCell对象构成的,进一步的信息请参见"控件和单元架构"部分。

控件和单元的实现机制基于Application Kit的一个重要设计模式:目标-动作(target-action)机制。单元对象可以保留用户点击(或在单元上进行某种动作)时应该发送给特定对象的消息标识信息。当用户操作一个控件时(比如用鼠标点击控件),控件就从它的单元对象抽出必要的信息,并向目标对象发送动作消息。目标-动作机制使您可以指定目标对象及应该调用的方法,从而赋予用户动作某种意义。您通常可以使用Interface Builder来对目标和动作进行设置,只要按住Control键,同时将鼠标指针从控件对象拖拽到应用程序或其它对象就可以了。您也可以通过编程的方式来设置目标和动作。

Application Kit中另一个基于设计模式的机制是委托(delegation)机制。用户界面上的很多对象,比如文本框和表视图,都定义了委托。委托对象代表被委托对象进行各种动作,或者与之相互协作,因此可以在用户界面操作中实现特定的应用程序逻辑。

在用户界面的总体功能方面,Application Kit提供了如下几个类:

§  全局应用程序对象 每个应用程序都使用一个NSApplication类的单件实例来控制主事件循环、跟踪应用程序的窗口和菜单、将事件分发给恰当的对象(即应用程序本身或者它的一个窗口)、建立高级别的自动释放池、以及接收应用程序级别的事件通告。NSApplication对象有一个委托对象(由您来分配),在应用程序启动或终止、被隐藏或被激活、即将打开用户选择的文件等的时候,委托对象会得到通知。通过设置NSApplication对象的委托对象并实现相应的委托方法,您就可以定制应用程序的行为,而不必生成NSApplication的子类。

§  窗口和视图。窗口和视图类,NSWindowNSView,继承自NSResponder类,可以对用户动作进行响应。NSApplication对象内维护着一个NSWindow对象的列表应用程序的每个窗口都有一个对应的对象,而每个NSWindow对象都维护一些具有一定层次结构的NSView对象。视图层次用于窗口内部的描画和事件处理。NSWindow对象负责处理窗口级别的事件,将其它事件分发给窗口中的视图对象,并为视图对象提供一个描画区域。NSWindow对象也有一个委托,用于定制窗口的行为。NSView是显示在窗口中的所有对象的超类。所有的NSView子类都需要借助图形函数来实现自己的描画方法;drawRect:是一个基本方法,在创建新的NSView时,需要重载这个方法。

"核心应用程序架构"部分也对NSViewNSWindow对象进行描述。

§  Cocoa绑定的控制器类NSController是一个抽象类,它的具体子类有NSObjectController NSArrayController、和NSTreeController,它们是Cocoa绑定实现的一部分。这个技术可以自动同步存储在对象中的应用程序数据和该数据在用户界面上的表现。有关这些类型的控制器对象的描述请参见"模型-视图-控制器设计模式" 部分。

§  面板(对话框)NSPanelNSWindow的子类,用于显示一些短暂的、全局的、或紧急的信息。举例来说,您可以使用一个NSPanel(而不是NSWindow)的实例来显示错误信息,或请求用户对特殊或不正常的情况进行响应。Application Kit为您实现一些常用的对话框,比如SaveOpen、和Print对话框,用于保存、打开、和打印文档。将这些对话框用于各种应用程序的公共操作,可以给用户一个统一的观感。

§  菜单和光标NSMenuNSMenuItem、和NSCursor类负责定义应用程序显示给用户的菜单和光标的行为和外观。

§  分组和滚动视图 NSBoxNSScrollView、和NSSplitView类用于为窗口中的视图集合或其它视图对象提供图形附件。您可以通过NSBox类将窗口中的元素分组,并为整组元素描画一个边界。NSSplitView类可以在垂直或水平方向附加一些视图,并为每个视图分配一定的公共区域,用户可以通过滑动控制条来重新分配视图的区域。NSScrollView类及其辅助类,NSClipView,为用户提供一个滚动机制,以及让用户初始化和控制滚动的图形对象。NSRulerView类则可以为一个滚动视图添加标尺和标志。

§  表视图和大纲视图NSTableView类以行列的方式显示数据。NSTableView可以很好地(但不仅限于)用于显示数据库记录,在这种场合下,一行对应于一条记录,列则包含记录属性。用户可以对单独的单元进行编辑,以及重新排列各个列。您可以通过设置委托和数据源对象来控制NSTableView对象的行为和内容。大纲视图(即NSOutlineView的实例,是NSTableView的子类)提供了另一种显示表格数据的方法。通过NSBrowser类,您可以为用户创建一个显示和漫游层次数据的对象。

抱歉!评论已关闭.