首页 > > > Cocoa基本原理指南(2010年4月16日).pdf

Cocoa基本原理指南(2010年4月16日).pdf

Cocoa基本原理指南(2010年4月16日).pdf

上传者: 爱情是大师的 2011-10-27 评分1 评论0 下载43 收藏10 阅读量1007 暂无简介 简介 举报

简介:本文档为《Cocoa基本原理指南(2010年4月16日)pdf》,可适用于手机软件领域,主题内容包含Cocoa基本原理指南的介绍本部分包含如下内容:本文的组织相关信息对于刚刚加入这个阵营的开发者来说Cocoa像是一个巨大而未知的新世界。Cocoa开符等。

Cocoa 基本原理指南的介绍 本部分包含如下内容: 本文的组织 相关信息 对于刚刚加入这个阵营的开发者来说,Cocoa 像是一个巨大而未知的新世界。Cocoa 开发环境的各种特性、 工具、概念、术语、编程接口、甚至是编程语言对他们来说可能都比较生疏。Cocoa 基本原理指南提供了 领略 Cocoa 技术景致的方向,介绍 Cocoa 的特性、基本概念、专用术语、结构、以及潜在的设计模式, 使开发者更加容易上手。 Cocoa 基本原理指南的组织结构使读者可以逐步获取有关 Cocoa 开发的一般性知识。它从最基础的信息开 始—即 Cocoa 有什么组件和能力,以考察 Cocoa 的主要架构作为结束。每一章都建立在前一章内容的基 础上,每个部分都给出某个主题的重要细节,但又仅仅在较高的级别上进行描述。文中还提供很多指引, 方便读者了解其它更为详尽的文档。 在 Cocoa 的开发文档中,Cocoa 基本原理指南是介绍 Cocoa 概念的初级文档,是诸如 Cocoa 描画指南和 Cocoa 的视编程指南这类文档的先期读物。阅读 Cocoa 基本原理指南需要的前提条件很少,但读者必须是 熟练的 C 程序员,且应该熟悉 Mac OS X 的能力和技术。您可以通过阅读 Mac OS X 技术概览一书来获得 这些知识。 本文的组织 Cocoa 基本原理指南有如下几个章节: 1. "什么是Cocoa?" 从功能和大体架构的角度介绍什么是 Cocoa,描述它的各种特性、框架、和开发环境。 2. "Cocoa对象" 解释Objective-C的基本用法和优点,以及 Cocoa对象的常见行为、接口、和生命周期。 3. "为Cocoa程序添加行为" 描述如何使用Cocoa框架来编写程 序,解释如何创建一个子类。 4. "Cocoa的设计模式" 描述Cocoa采纳的设计模式,特别是模 型-视-控制器对象模型。 5. "和对象进行通讯" 讨论Cocoa对象之间的通讯机制和编程接 口,包括委托、通告、和绑定技术。 6. "核心应用程序架构" 考察应用程序对象之间的关系,Cocoa 通过这些对象来进行描画和事件处理。 7. "其它Cocoa架构" 总结Cocoa支持应用程序开发和扩展应用 程序能力的主要架构。 ????:http://www.apple.com.cn/developer/Documentation/index.html ??:http://www.aisidechina.com/forum/ 相关信息 您可以在技术书店里找到几个介绍 Cocoa 的优秀读物,用以补充 Cocoa 基本原理指南一书中的知识。此 外,在开始成为 Cocoa 开发者之前,您还应该阅读一些苹果公司出版的其它资料: Objective-C 编程语言 描述 Objective-C 编程语言和运行环境。 Cocoa 应用程序教程 向您演示如何用 Xcode 开发环境、Cocoa 框架、以及用 Objective-C 创建一个简单的 Cocoa 应用程序。 模型对象实现指南 讨论子类设计和实现的基本问题。 Cocoa 的环境 Cocoa 应用程序正逐渐成为 Mac OS X 的应用程序标准。iPhoto、Safari、和 Mail 都是 Cocoa 应用程序。 这些应用程序由于聪明的设计、丰富的功能、和激动人心的用户界面而受到了相当程度的好评。但是,对 于一般用户来说并不明显(和典型的开发周期相比)的是:这些程序从设计阶段到最终部署的过程是多么 的快速。作为应用程序开发环境,是什么使 Cocoa 成为比 Carbon 切实可行、甚至是强制性的替代呢? 本部分包含如下内容: 介绍Cocoa Cocoa在Mac OS X中的位置 介绍 Cocoa 和所有的应用程序环境一样,Cocoa 包括两个方面:即运行环境方面和开发方面。在运行环境方面,Cocoa 应用程序呈现 Aqua 用户界面,且和操作系统的其它可视部分紧密集成,这些部分包括 Finder、Dock、和 基于所有环境的其它应用程序。Cocoa 无缝地成为了用户体验的一部分,在运行环境方面表现优秀。 但是,程序员更感兴趣的是开发方面。Cocoa 是一个面向对象的软件组件—类—的集成套件,它使开发者 可以快速创建强壮和全功能的 Mac OS X 应用程序。这些类是可复用和可支配的软件积木,开发者可以直 接使用,或者根据具体需求对其进行扩展。从用户界面对象到 Bonjour 网络,几乎每个想象得到的开发需 求都存在对应的 Cocoa 类;对于没有预想到的需求,您可以轻松地从现有类派生出子类来实现。 在各种面向对象的开发环境中,Cocoa有着最为著名的血统。从 1989 年作为NeXTSTEP推出到现在,人 们一直对它进行精化和测试(参见 "一点历史"部分)。它优雅而强大的设计完美地适合所有类型的快速软 件开发:不仅适合开发应用程序,也适合开发命令行工具、插件、和不同类型的程序包。Cocoa为您的应 用程序“免费”提供很多行为和外观,使您可以将更多的时间用于有特色的功能上(有关Cocoa提供的功能的 详细信息,请参见 "Cocoa应用程序的特性"部分)。 在开发 Cocoa 软件的时候,您可以使用多种编程语言。基本的语言是 Objective-C。Objective-C 拥有自己 的 Cocoa 运行环境,是 ANSI C 的超集,它在 ANSI C 的语法和语义特性上(从 Smalltalk 派生而来)进行 ????:http://www.apple.com.cn/developer/Documentation/index.html ??:http://www.aisidechina.com/forum/ 扩展,使之支持面向对象的编程。新增的规则简单而又易于学习和使用。由于 Objective-C 是基于 ANSI C 的,您可以自由地将 C 代码直接和 Objective-C 代码混合在一起。而且,您的代码可以调用非 Cocoa 的编 程接口中定义的所有函数,比如 Carbon 和 BSD。您甚至可以将 C++代码混合到 Cocoa 代码中,并将它们 连接在同一个执行文件中。最后,Cocoa 支持 Java。Cocoa 为此定义了一个平行的 Java 类库,并且实现 了一个将 Java 接口映射到 Objective-C 实现的桥机制。Cocoa 的 Java 支持使您可以将本地的 Java 对象 和 Cocoa 对象混合在一起使用(在某些限制下)。 重要信息:Cocoa-Java 是熟悉 Java 语言的开发者的学习环境,我们并不推荐将它用于产品开发。 Objective-C API 会不断进化,而 Cocoa-Java API 并不并行维护。 您甚至可以用PyObjC,即Python/Objective-C桥来进行Cocoa编程。基于PyObjC,您可以用Python来书写 Cocoa程序。Python是一种解释性的、注重交互的、及面向对象的编程语言。PyObjC使Python对象可以向 Objective-C对象传递消息,就象传递给Python对象一样;同时还使Objective-C对象可以向Python对象传 递消息。更多信息请参见 "用Python开发基于PyObjC的Cocoa应用程序"文档,它位于苹果开发者联盟 (Apple Developer Connection)网站上。 核心的Cocoa类库封装在两个框架中,即Foundation和Application Kit框架。和所有框架一样,这两个框架 不仅包含动态共享库(有时是几个兼容版本的库),还包含头文件、API文档、和相关的资源。Application Kit和Foundation框架的分割反映了Cocoa编程接口分为图形用户界面部分和非图形接口。这两个框架对于 最终产品为应用程序的Cocoa工程来说都是必要的。还有几个较小的、使用Cocoa编程接口的框架和Mac OS X一起发行,比如Screen Saver(屏幕保护)和Address Book(地址簿)框架。随着时间的推移,还 会有更多框架加入到操作系统中。更多信息请参见 "Cocoa框架"部分。 Cocoa 在 Mac OS X 中的位置 图 1-1 显示了一个简化了的 Mac OS X 系统架构框图: 图 1-1 Mac OS X 架构—简化视图 这个框图只是为了一个简单的目的:为那些不熟悉苹果平台的开发者明确指出 Mac OS X 的主要组件及其 依赖性。为了简洁,图中省略了一些重要细节,并使其它部分变得模糊。这些细节构成了框图的重要部分, 显示 Cocoa 和 Mac OS X 其它部分的关系。 图 1-2 在架构级别上更为精确地反映了 Cocoa 的位置。这个框图将 Mac OS X 显示为一系列的软件层,从 系统的基础 Darwin 到各种应用程序环境。位于中间的层代表包含在 Core Services(核心服务)和 Application Services(应用程序服务)这两个主要的雨伞框架下的系统软件。在这个框图中,一个层通常 依赖于其下面的其它层。 ????:http://www.apple.com.cn/developer/Documentation/index.html ??:http://www.aisidechina.com/forum/ 图 1-2 Cocoa 在 Mac OS X 架构中的位置 在某些方面,这个框图类似于先前的框图。举例来说,主要负责 Aqua 用户界面渲染的系统组件 Quartz(在 Core Graphics 框架中实现)是 Application Services 层的一部分。架构栈的基础部分是 Darwin,包括 Cocoa 在内的 Mac OS X 各个部分最终都依赖于 Darwin。 但是,如果您进一步查看雨伞框架中的一个(或一组)Cocoa 子类或特定的子框架,就会发现 Cocoa 或者 对 Mac OS X 其它部分有特定的依赖性,或者通过自身的接口向外部提供基础的技术。图 1-3 部分显示了 上述的依赖性和外部接口。 请注意:虽然 Cocoa 依赖于特定的框架,但它并不是仅仅“坐”在这些框架的上面。在某些情况下,Cocoa 和其它框架(比如 Carbon)是对等的,甚至可以实现一些其它对等框架不能实现的任务。Cocoa 不仅仅 是基础技术上面的一个面向对象的封装层。 图 1-3 进一步考察 Cocoa 架构—一些主要的依赖关系 苹果公司对 Cocoa 进行了认真的设计,使 Cocoa 编程接口成为应用程序通常需要的基础技术访问通道。 但是如果您需要的某些能力不能在 Cocoa 的接口中找到,或者需要对应用程序进行更为精细的控制,那么 也可以直接使用底层的框架(Core Graphics 就是一个重要的例子,通过调用该框架或 OpenGL 的函数, 您的代码可以画出比 Cocoa 描画方法能做到的、更加复杂而具有细微差别的图像)。幸运的是,使用这些 低级别的框架并不是问题,因为绝大多数依赖框架的编程接口是用 ANSI C 写的,Objective-C 是其超集。 请注意:架构概述部分的目的并不是列举出Cocoa有哪些接口或者它对Mac OS X其它部分有哪些依赖性。 相反,概述部分只是考虑最有趣的部分,目的是给您一个有关框架架构的基本思想。 Cocoa 依赖的、或者通过类和方法为之提供访问通道的主要基础框架有 Core Foundation,Carbon,Core Graphics (Quartz),Launch Services,和 Print Core (打印子系统)。详细信息如下: ????:http://www.apple.com.cn/developer/Documentation/index.html ??:http://www.aisidechina.com/forum/ Core Foundation。Foundation 框架的很多类都基于 Core Foundation 中对应的封装类型。它们 之间的这种紧密关系使“免费桥接”技术—即在兼容的Core Foundation和Foundation类型之间实现类 型转换—成为可能。某些 Core Foundation 的实现又基于 Darwin 层的 BSD 部分。 Carbon。Cocoa 使用了 Carbon 提供的某些服务,因为有些 Carbon 框架在 Core Services 和 Application Services 层中定位为系统级别的服务。作为例子,Carbon Core 就是这些框架中特别重 要的一个,Cocoa 使用了它提供的 File Manager(文件管理器)组件来进行不同文件系统表示之间 的转换。 Core Graphics。Cocoa 描画和图像处理类(相当自然且紧密地)基于 Core Graphics 框架,它 实现了 Quartz 和窗口服务器组件。 Launch Services。NSWorkspace 类负责向外提供 Launch Services 的潜在能力。Cocoa 还使用 Launch Services 提供的应用程序注册功能来获取与应用程序及文档相关联的图标。 Print Core。Cocoa 的打印类是打印子系统的一个面向对象的接口。 此外,Cocoa 还使用 Carbon 环境的 Text Encoding Converter(文本编码转换器)服务来处理一些字符串 编码转换。还有一些 Cocoa 方法向外提供 I/O Kit 框架、QuickDraw (QD)框架、 Apple Event (AE)框架、 和 ATS 框架的部分功能,分别用于进行电源管理、QuickDraw 描画、 Apple Event 处理、以及提供字体 支持。 进一步阅读: Mac OS X 技术概浏览一书给出有关框架、服务、技术、和 Mac OS X 其它组件的概览。苹 果人机界面指南一书则专注于说明 Aqua 人机界面的外观和行为。 Cocoa 应用程序的特性 创建一个 Cocoa 应用程序,而又不必编写哪怕一行代码的情况是可能的。在 Xcode 中建立一个新的 Cocoa 工程,然后进行连编就可以了。当然,这个应用程序不做很多工作,至少不做很多有趣的工作。但是,这 个极度简单的应用程序在鼠标双击时仍然可以启动,可以在 Dock 上显示图标,可以显示其主菜单和窗口 (标题为“Window”),可以根据命令将自身隐藏,可以和其它运行着的应用程序互动,还可以处理退出命 令。您可以对这个窗口进行移动、调整尺寸、最小化、和关闭,甚至可以打印包含在窗口中的空白部分。 想像一下如果加入一点代码,您可以做些什么。 在编程方面,Cocoa 为开发者提供很多免费或代价很低的支持。当然,要成为一个高效率的 Cocoa 开发者 意味着要熟悉新的概念、设计模式、编程接口、和开发工具,而这方面的努力并不是无足轻重的。但是熟 能生巧,编程在很大程度上变成一种将 Cocoa 提供的编程组件和负责定义特殊逻辑的定制对象及代码装配 在一起、再将这些装配物组合在一起的练习。 接下来的部分是一个简短的列表,说明 Cocoa 如何为您的应用程序增加价值,而只需要您加入少量的工作 (有时候甚至不需要): 基本应用程序框架—Cocoa 为事件驱动的行为和应用程序、窗口、工作空间(workspace)的管 理提供了基础设施。在大多数情况下,您不必直接处理事件或发送任何描画命令给渲染库。 用户界面对象—Cocoa 为应用程序的用户界面提供了丰富而又现成的对象。这些对象的大部分都 在 Interface Builder(创建用户界面的开发工具)的选盘上,您只要简单地将对象从选盘拖拽到界面 ????:http://www.apple.com.cn/developer/Documentation/index.html ??:http://www.aisidechina.com/forum/ 上,配置好属性,并将它连接到其它对象上就可以了(当然,您也可以通过编程的方式对其进行实例 化、配置、以及建立对象之间的连接)。下面是一些 Cocoa 用户界面对象的实例: windows text fields radio buttons drawers sheets tab views table views browsers pop-up lists sliders image views color wells combo boxes scroll views text views steppers 此外,Cocoa 还有一些支持用户界面的技术,包括提高可访问性、执行正当性检查、以及连接用 户界面对象和定制对象需要的技术。 描画和图像处理—Cocoa 带有一个可以锁定图形焦点并将视图(或视图的一部分)标识为“变脏” 的框架,从而支持高效的定制视图描画。Cocoa 中还有一些描画贝齐尔(Bezier)路径、执行远交变 换、合成图像、以及创建不同图像表示的编程工具类。 系统交互—Cocoa 使您的应用程序可以和文件系统、工作空间、以及其它应用程序进行交互(或 使用它们提供的服务)。 数据交换—Cocoa 通过拷贝-粘贴、拖拽模型、以及 Services 菜单简化了应用程序内部和应用程 序之间的数据交换。 性能—为了增强应用程序的性能,Cocoa 提供了多线程、空闲时间处理、资源的迟缓加载、内存 管理、和运行环操作方面的编程支持。 基于文档的应用程序—Cocoa 为应用程序提供一种可以包含无限数量的文档架构。每个文档都包 含在它自己的窗口中(比如一个字处理程序)。事实上,如果您选择“Document-based application (基于文档的应用程序)”工程类型,那么这类应用程序需要的很多组件就自动被创建了。 脚本处理—通过应用程序脚本能力信息和一组支持脚本的 Cocoa 类,您就可以使自己的应用程序 具有脚本能力。也就是说,您的应用程序可以响应由 AppleScript 脚本发出的命令。应用程序也可以 通过执行脚本或使用单独的Apple Event来向其它应用程序发送命令,或者接受其它应用程序的命令。 结果是每个具有脚本能力的应用程序都可以为用户或其它应用程序提供服务。 国际化—Cocoa 使用一种已经精化多年的方法来支持国际化和本地化。这种方法基于偏好语言的 用户列表,将本地化的资源放到应用程序的程序包(bundle)中。Cocoa 还提供产生和访问本地化字 符串的工具和编程接口。而且,Cocoa 中的文本操作缺省情况下是基于 Unicode 的,因此有利于程 序的国际化。 Undo 管理—您可以注册一个用户动作来和 undo 管理器协同工作,当用户选择合适的菜单项时, 它们会处理 undo(或 redo)动作。Undo 管理器通过独立的栈来维护 undo 和 redo 操作。 文本—Cocoa 提供了一个复杂的文本系统,使您可以进行从简单到较为复杂的文本处理,简单文 本处理的一个例子是在文本视图上显示可编辑的文本,复杂的处理则比如字距和连字的控制、拼写检 查、和嵌入图像。 ????:http://www.apple.com.cn/developer/Documentation/index.html ??:http://www.aisidechina.com/forum/ 打印—和文本系统相类似,打印架构使您可以打印文档和其它应用程序内容,并进行各种控制调 整。在最简单的级别上,您缺省可以打印各种视图的内容;在较为复杂的级别上,您可以定义打印的 内容和格式,控制一个打印作业如何进行,以及在打印面板上添加必要的视图。 偏好设置—用户缺省设置系统基于一个系统范围内的数据库,您可以将全局或应用程序特有的偏 好设置存储在这个数据库中。 连网—Cocoa 包含一个分布式对象(Distributed Objects)架构,它使一个 Cocoa 进程可以和相 同或不同的计算机上的其它进程进行通讯。这个架构还提供将 Bonjour 能力集成到应用程序的编程接 口。 多媒体—Cocoa 提供了 QuickTime 视频和基本音频能力的支持。 开发环境 说 Cocoa 有它自己的开发环境并不十分精确。一个原因是程序员可以使用苹果主要的开发工具—Xcode 和 Interface Builder—来开发 Mac OS X 其它应用程序环境的程序,比如 Carbon;其次,开发 Cocoa 应用程 序时完全不使用 Xcode 和 Interface Builder 也是可能的,比如,您可以使用 Metrowerks 的 CodeWarrior 来管理、编译、和调试 Cocoa 工程;而且,如果您实在不愿意改变,也可以使用像 Emacs 这样的文本编 辑器来编写代码,用 make file 和命令行进行应用程序的连编,然后在命令行上通过 gdb 调试器来调试程 序。 但是,Xcode 和 Interface Builder 是开发 Cooca 软件优先使用的工具。它们的起源正好和 Cocoa 是一致 的,所以在工具和框架之间存在高度的兼容性。Xcode 和 Interface Builder 一起,使设计、管理、连编、 和调试 Cocoa 软件工程变得非常容易。还有一个叫 AppleScript Studio 的工具,可以扩展应用程序的能力, 您可以通过这个工具来创建具有脚本能力的 Cocoa 程序和通过 AppleScript 控制其它应用程序的程序。 本部分包含如下内容: Xcode Interface Builder AppleScript Studio 其它开发工具 Xcode Xcode 是苹果公司在 Mac OS X 下的集成开发环境(IDE)引擎。它负责处理从最开始到工程的最终部署 这一过程中的大多数细节。您可以通过这个工具来完成如下工作: 创建和管理工程,包括指定目标的需求、依赖性、和连编的风格。 在具有语法染色、自动缩进等功能的编辑器上编写源代码。 在工程的不同组件中进行漫游和检索,包括头文件和文档。 ????:http://www.apple.com.cn/developer/Documentation/index.html ??:http://www.aisidechina.com/forum/ 连编工程 在图形化的源代码级调试器上调试工程 Xcode 可以连编由 C、C++、Objective-C、Objective-C++、和 Java 编写的源代码组成的工程,可以生成 Mac OS X 支持的所有类型的执行代码,包括命令行工具、框架、插件、内核扩展、程序包、和应用程序。 Xcode 允许您对连编和调试工具、可执行文件的打包方式(包括信息属性列表和本地化程序包)、连编过 程(包括拷贝文件、脚本文件处理、和其它连编阶段)、以及用户界面(包括分立和多视图的代码编辑器) 进行几乎无限的定制;还支持几个源代码管理系统(其中有 CVS 和 Perforce),使您可以将文件追加到代 码库、提交修改、获取更新版本、以及进行版本的比较。 图 1-4 显示一个 Xcode 工程的实例。 图 1-4 Xcode 中的 TextEdit 实例 Xcode特别适合用于Cocoa开发。在创建工程时,Xcode可以通过对应于Cocoa工程类型的工程模板,为您 建立一个初始的开发环境。Cocoa工程类型有:应用程序(Objective-C或Java)、基于文档的应用程序 (Objective-C或Java)、工具、程序包、和框架。Xcode使用GNU C编译器(gcc)来编译Cocoa软件, 使用GNU源代码级调试器(gdb)来调试软件。在Cocoa开发中使用gcc和gdb从它还是NeXTSTEP(参见 "一点历史"部分)的时代就开始了。对Cocoa二进制代码的编译和调试经过多年的精化、扩展、和调优。 Xcode 也有一个类浏览的功能,可以查看所有导入的 Cocoa 框架类和您自己的定制类,还有它们的继承关 系;从类浏览器中,您可以请求查看任何类的文档。Xcode 还包含一些设计工具,其中有一个工具可以用 于设计 Core Data 程序中使用的数据实体的属性和关系。 Xcode 和另外一个主要的开发工具 Interface Builder 良好地集成在一起。在 Interface Builder 中,您可以 定义一个类(包括超类,插座变量,和动作),并为工程中的每个类生成源代码文件的框架。在 Xcode 中, 您可以为定制类添加插座变量和动作,然后让 Interface Builder 将这些实体导入到 nib 文件中。 请注意:简单地说,插座变量(outlet)是一个对象和另一个对象的归档连接(表示为对象中的一个实例变 量);动作则是当按键或滑块这类对象被操作时,在被称为目标(target)的对象(通常是一个定制对象) 中被调用的方法。Interface Builder也会把目标对象和其它对象(称为控件)之间的连接进行归档。更多有 关插座变量、目标、和动作的信息请参见 "插座变量"和 "目标-动作机制"部分。 进一步阅读:Xcode快速指南可以使您概览Xcode,并为您提供其它开发工具文档的连接。 Interface Builder ????:http://www.apple.com.cn/developer/Documentation/index.html ??:http://www.aisidechina.com/forum/ Cocoa 工程的第二个主要开发工具是 Interface Builder。顾名思义,Interface Builder 是用于创建用户界面 的图形工具。Interface Builder 在 Cocoa 还是 NeXTSTEP 的时候就已经存在了,而且从那时侯起,它就作 为同类软件中的佼佼者而获得广泛的认可。很自然,它和 Cocoa 的结合是很紧密的。而且您也可以用它来 为 Carbon 应用程序创建用户界面。 Interface Builder 以三个主要的设计元素为中心: Nib 文件。nib 文件实际上是以档案的形式对用户界面中出现的对象进行文件包装(一个封装的目 录)。这种档案本质上是一种对象图,包含每个对象的信息,包括对象的尺寸及在其屏幕(如果是个 窗口)或窗口内的位置信息。Cocoa 应用程序中的 Nib 文件还包含定制类的代理引用和对象间连接信 息,包括使用 Cocoa 绑定技术建立起来的连接。当您在 Interface Builder 中创建并保存一个用户界 面时,重建该界面需要的所有信息都会被存在 nib 文件中。nib 文件还可以包含界面中使用的图像和 声音文件。 Interface Builder 将 nib 文件存储在 Cocoa 工程中的一个本地化目录下。在连编工程时,nib 文件就 会被拷贝到新建的程序包中对应的本地化目录下(nib 文件因此可以提供一种很好的用户界面本地化 方法)。 Cocoa 应用程序缺省(也就是说 Xcode 会自动创建)有一个主 nib 文件,在运行时自动被 装载和显示。主 nib 文件包含应用程序的主菜单,并可能有一个或多个窗口。您的应用程序可以根据 需要装载辅助的 nib 文件,比如文档或预置窗口所在的文件。 Interface Builder 将 nib 文件的内容表示在 nib 文件窗口中。您也可以在 nib 文件窗口中定义定制类及 考察对象之间的连接。 选盘。 Interface Builder 的选盘(Palette)窗口中包含多个面板,或者称为“选盘”,每个选盘中 包含一个彼此有关系的用户界面对象的集合。将对象从选盘拖拽到恰当的位置上就可以创建用户界面 了,这里的位置可以是屏幕、窗口、各种视图、或者主菜单(选盘对象自身不一定是可见的,但是必 须以某种形式影响用户界面)。当您将一个对象从选盘上拖出时,Interface Builder 会实例化一个该 对象的缺省实例。这个实例是一个真正的 Cocoa 对象,而不是运行时需要创建的实例的代理对象。 如果您愿意的话,可以将您自己的定制对象放在选盘上。 查看器。 Interface Builder 为用户界面上的对象提供一个查看器(称为 Info 窗口)。Info 窗口由 一系列可选择的面板组成,用于设置对象的初始属性和尺寸(虽然尺寸和很多属性也可以直接进行操 作)。其中的两个面板用于建立对象之间的连接,一个基于插座变量和动作,另一个基于绑定技术。 还有一个面板用于将定制类代替 Application Kit 框架中的超类。其它面板较为特殊,专用于建立用户 界面对象和帮助标签及 AppleScript 事件处理器之间的关联。 图 1-5 显示了一个在 Interface Builder 中打开的 nib 文件,以及支持窗口。 图 1-5 Interface Builder 中 TextEdit 的预置窗口 ????:http://www.apple.com.cn/developer/Documentation/index.html ??:http://www.aisidechina.com/forum/ 用 Interface Builder 创建用户界面的步骤比较直接: 1. 将窗口或面板拖拽到屏幕上(面板等同于对话框或辅助窗口)。 2. 设置窗口的初始(或固定的)位置、尺寸、和属性。 3. 将文本框、按键、表视图控件、和弹出式列表等对象拖到窗口或之前放好的视图对象上。 4. 为这些对象设置初始(或固定的)位置、尺寸、和属性。 5. 为应用程序定义定制类。 您可以直接在 Interface Builder 中完成这个工作,或者将事先创建好的头文件装载到 Interface Builder。在进行类的定制时,可以通过 Interface Builder 指定插座变量和动作。 6. 在对象之间建立绑定和连接。这有两种形式: 在应用程序的视图、控制器、和模型对象之间建立绑定关系。 把插座变量连接到它们引用的对象,接着把动作连接到目标对象中合适的方法上。 7. 保存和测试用户界面。 Interface Builder 有一个功能,可以在设计的各个阶段测试界面(定制的行为除外)。 ????:http://www.apple.com.cn/developer/Documentation/index.html ??:http://www.aisidechina.com/forum/ 8. 为您定义的各个定制类创建头文件和源代码文件,这些文件会出现在关联的 Xcode 工程上。 Interface Builder 还包含一个功能:在对一个摆好位置的对象进行移动或调整其尺寸时,会通过一些短暂出 现的蓝线来显示当前位置是否遵循 Aqua 人机界面指南,包括推荐的尺寸、对齐、与用户界面上的其它对 象或窗口边界的相对位置。 进一步阅读:有关用户界面开发工具的进一步信息,请参见Interface Builder部分。此外,"Nib文件"部分给 出了nib文件及其在应用程序中如何被使用的更多信息。您还可以参考 "对象之间的通讯"部分,以概要了解 插座变量、目标-动作机制、以及Cocoa绑定技术。 AppleScript Studio 多年来,Mac OS 一直有一个定义良好的特性,就是用户可以通过由 AppleScript 语言写成的脚本控制应用 程序。很多用户发现这个特性是不可或缺的,因为它可以将涉及多个应用程序的复杂操作序列串接在一起。 AppleScript 的能力在 Mac OS X 系统上更进了一步。AppleScript Studio 是一种开发技术,用于创建通过 AppleScript 脚本控制复杂用户界面的 Cocoa 程序。 AppleScript Studio 把来自 AppleScript、Xcode、Interface Builder、和 Cocoa 的各种元素结合起来,提供 了一个创建 AppleScript 解决方案的开发环境。您可以通过它来制作应用程序,完成如下任务: 执行 AppleScript 脚本 控制应用程序的界面 控制具有脚本能力的应用程序或操作系统中支持脚本的部分 由于 AppleScript Studio 将 AppleScript 和 Xcode、Interface Builder、和 Cocoa 集成在一起,脚本编程者 可以利用这些组件各自的优势和能力。他们可以从 Interface Builder 选盘中拖出一组丰富的用户界面对象, 根据个人的喜好进行定制;可以得到内置的 Aqua 用户界面指南的支持;还能够连编和维护带有多个目标 和连编步骤的的复杂工程。 这个开发环境使我们有可能通过脚本对 Script Editor 程序(它是创建 AppleScript 脚本的传统工具)不能提 供的能力进行控制,这些能力包括: 创建任意大的脚本 在脚本中进行检索和替代 单步脚本调试,支持各种执行方式 方便访问脚本中的处理函数和属性 灵活的字典查看器,和应用程序的脚本用语一起使用。 进一步阅读:更多信息请参见 AppleScript Studio编程指南。 其它开发工具 虽然 Xcode 和 Interface Builder 是开发 Cocoa 应用程序的主要工具,但是还有许多工具可以使用。在一些 应用程序开发阶段中,您可能会找到很多辅助的应用程序和命令行工具。 ????:http://www.apple.com.cn/developer/Documentation/index.html ??:http://www.aisidechina.com/forum/ 这个部分将回顾一些辅助性的开发工具并简短地讨论一些命令行工具,然而命令行工具的数量太多,即使 对它们进行一个浓缩的总结也超出了本文的范围。您的最好选择就是访问/usr/bin和/usr/sbin目录下 各种工具的使用手册(man 页面),只要在 Terminal 外壳下键入 man 命令,后面跟着命令名称就可以了。 在/Developer/Tools目录下还有一些苹果开发的命令行工具。 性能工具 下面这些应用程序用于软件性能的测量和分析。它们位于/Developer/Applications目录下。 Sampler 用于分析程序运行时的行为和内存分配。顾名思义,Sampler 会按一定的时间周期对程 序的函数调用栈进行采样,并在采样结束时向您显示调用频率最高的函数或方法。这种信息有助于定 位消耗大量 CPU 时间或进行内存分配的函数或方法。 ObjectAlloc 用于跟踪各种程序的内存分配与释放行为。这种历史数据可以显示重复的内存分配 行为和总体的分配趋势。对于 Objective-C 代码,ObjectAlloc 在记录 alloc调用的同时,也记录每 个 copy、retain、release、autorelease调用,而且还记录在 Core Foundation 中与这些方法 相对应的函数,以及 malloc(及相关)函数进行的内存分配。 MallocDebug 按分配时的调用栈顺序显示程序中当前已分配的内存块。通过这个工具一下子就可 以看到您的应用程序消耗多少内存、这些内存是从哪里分配的、以及哪些函数分配了大量的内存。 MallocDebug 还可以找出在程序中分配的、却没有被引用的内存,因此可以帮助您发现内存泄露并跟 踪这些泄露的内存是在哪里分配的。 QuartzDebug 是一个帮助您对应用程序的显示机制进行调试的工具,对大量进行描画和图像处理 的应用程序特别有用。QuartzDebug 包括如下几个调试选项: 自动闪烁描画模式,这种模式会在每个描画操作之后闪烁一下图形上下文。 在更新屏幕区域之前先用黄色对该区域进行描画的模式。 用于取得整个系统的窗口列表的静态快照,同时给出每个窗口的拥有者及该窗口消耗多 少内存的选项。 Thread Viewer 显示一个进程中各个线程的活动。这个工具显示每个线程的活动时间线,动作在 时间线上用不同的颜色表示。点击时间线可以得到与点击位置相对应的活动回溯样本。 还有一些命令行工具可以用于性能分析,比如: top,对当前正在运行的进程进行采样统计并显示统计结果。 gprof,用于产生程序的执行轮廓 fs_usage,显示文件系统访问的统计信息 还有其它很多命令行工具可以用于性能分析。有关 Cocoa 应用程序开发可以用哪些性能分析工具以及性能 分析的概念、技术、和策略的更多信息,请参见性能编程主题(Performance Programming Topics)文 档。 请注意:性能概述对 Mac OS X 的性能工具进行讨论。 其它工具 ????:http://www.apple.com.cn/developer/Documentation/index.html ??:http://www.aisidechina.com/forum/ 您还可以发现下面的工具对 Cocoa 应用程序开发很有用(位于/Developer/Applications目录下): Icon Composer 和 Icns Browser 您可以用 Icon Composer 来导入各种格式的图像,创建应用程 序图标和文档图标的图标文件;还可以用 Icns Browser 程序来创建不同尺寸、位深度、和位掩码的 图标变体。 FileMerge 这个工具可以可视化地“diffs” 各种文本文件(比如源代码文件、头文件、和属性列表), 并具有选择合并的能力。 Package Maker 通过 Installer 程序为应用程序(其它类型的软件)制作安装包。 Property List Editor 这是一个编辑器,用于创建和编辑 XML 及较老风格的属性列表。 Cocoa 框架 是什么因素使一个程序成为 Cocoa 程序呢?肯定不是编程语言,因为在 Cocoa 开发中您可以使用各种语 言;也不是开发工具,因为您在命令行上就可以创建 Cocoa 程序(虽然那会使开发过程变得复杂,且需要 消耗大量时间)。那么,所有 Cocoa 程序的共同点是什么?是什么使它们变得与众不同?答案是这些程序 都是由一些对象组成,而这些对象最终都是从 NSObject这个根类继承下来的;还有,这些程序都是基于 Objective-C 运行环境的。这个说法对于所有的 Cocoa 框架来说也是正确的。 请注意:上面的说法还需要做一点限制。首先,Cocoa 还有另一个根类,即 NSProxy。只是 NSProxy很 少用于 Cocoa 编程。其次,您可以创建您自己的根类,只是这需要很多工作(包括编写与 Objective-C 运 行环境进行交互的代码),而且为此花费时间可能是不值得的。 Mac OS X 包含多个 Cocoa 框架,苹果和第三方厂商也随时会发布更多的框架。无论 Cocoa 框架有多么丰 富,有两个框架总是与众不同:即 Foundation 和 Application Kit 框架,它们是核心的 Cocoa 框架。如果 您没有连接并使用 Application Kit 框架中的类,就不能开发任何类型的 Cocoa 软件;同样地,如果您没有 连接并使用 Foundation 框架中的类,也不能开发任何类型的 Cocoa 软件(当您连接 Cocoa 雨伞框架的时 候,Xcode 会自动连接这些框架)。Foundation 和 Application Kit 框架在 Cocoa 开发中是必要的,其它框 架则是辅助和可选的。 下面的部分将讨论上述两个核心的 Cocoa 框架,并简要描述一些辅助性的框架。为了使这些大框架更加容 易理解,在介绍 Foundation 和 Application Kit 框架时,我们将每个层次中的数十个类分为不同的功能组。 虽然这种分组方式有很强的逻辑基础,但是人们也可以按其它方式合理地进行分组。 本部分包含如下内容: Foundation Application Kit 带有Cocoa API的其它框架 Foundation ????:http://www.apple.com.cn/developer/Documentation/index.html ??:http://www.aisidechina.com/forum/ Foundation 框架定义了一些基础类,可以用于各种类型的 Cocoa 程序。Foundation 框架和 Application Kit 框架的区分标准在于用户界面。如果一个对象既不出现在用户界面上,也不是专门用于支持用户界面,那 么它就属于 Foundation 框架。您可以仅用 Foundation 框架创建一个 Cocoa 程序,而不涉及其它框架;命 令行工具和 Internet 服务器就是这样的例子。 苹果公司在设计 Foundation 框架时牢记如下目标: 为诸如内存管理、对象改变、和通告这样的事物定义基本的对象行为和引入一致的规则。 通过程序包技术和 Unicode 字符串(和其它技术一起)支持国际化和本地化。 支持对象的持久保存。 支持对象的分发。 在一定程度上独立于操作系统,以支持移植。 为编程的元类型提供对象封装或等价物,比如数值、字符串、和集合,以及为访问底层系统实体 和服务提供工具类,比如端口、线程、和文件系统。 Cocoa 应用程序定义为需要连接 Application Kit 框架,同时也总是必须连接 Foundation 框架的程序。这两 个类层次都共用同一个根类,即 NSObject类,很多(如果不是绝大多数的话)Application Kit 的方法和函 数都将 Foundation 对象作为参数或返回值。一些 Foundation 类可能看起来像是为应用程序设计的, NSUndoManager和 NSUserDefaults类就是其中的两个例子,但是由于它们没有涉及到用户界面,所以 被包含在 Foundation 框架中。 Foundation 的范式和策略 Foundation 为 Cocoa 编程引入了几个范式和策略,以保证程序中的对象在特定的环境下具有一致的行为 和期望。包括: 对象的所有权和对象的清除。Foundation 建立了一个对象所有权策略,用以代替垃圾收集机制。 该策略指定对象需要释放自己创建、拷贝、或显式保留的其它对象。NSObject(类和协议)定义了 保留和释放对象的方法。自动释放池(在 NSAutoreleasePool类中定义)实现了一种迟缓释放 (delayed-release)机制,使 Cocoa 程序在处理不由调用者负责的返回对象上有一个一致的规则。 有关对象所有权和对象清除的更多信息,请参见 Cocoa 的内存管理编程指南。 可变类的变体。在Foundation中,很多值和容器类的不可变类都有一个可以修改的变体,可变类 总是不可变类的子类。如果您需要动态地改变一个经过封装的值,或者改变这种对象的所属关系,可 以创建一个可变类的实例。由于它是从相应的不可变类继承下来的,所以您可以在接受不可变类型参 数的方法中传入可变类的实例。对象可变性的更多信息请参见 "对象的可变性"部分。 类簇。类簇是一个抽象类及一组私有的具体子类的组合,抽象类是这些子类的雨伞接口。根据不 同的上下文(特别是创建对象所用的方法),类簇可以为您返回恰当的、经过优化的类实例。举例来 说,NSString和NSMutableString就是针对不同的存储需要进行优化的各种私有子类实例的经纪 类。多年来,具体类进行了几次修改,但应用程序依然可以工作。类簇的更多信息请参见 "类簇"部分。 通告。通告是Cocoa的主要设计模式。它基于广播机制,该机制使一个对象(称为观察者)可以 在另一个对象进行某种任务或遇到某种情况时,以用户或系统事件的方式得到通告。产生通告的对象 可能并不知道通告观察者的存在或身份。有几种类型的通告:同步、异步、和分布式通告。Foundation 的通告机制由NSNotification、NSNotificationCenter、NSNotificationQueue、和 NSDistributedNotificationCenter类实现的。更多关于通告的信息请参见 "通告"部分。 ????:http://www.apple.com.cn/developer/Documentation/index.html ??:http://www.aisidechina.com/forum/ Foundation 类 Foundation类层次的根是NSObject类,它(和NSObject及NSCopying协议一起)定义了基本的对象属性 和行为。更多有关NSObject和基本对象行为的信息请参见 "根类"部分。 Foundation框架的剩余部分由几组相互关联的类和一些独立的类组成。有一些代表基本数据类型的类,如 字符串、字节数组、用于存储其它对象的集合类;一些代表系统信息的类,如日期类;还有一些代表系统 实体的类,比如端口、线程、和进程。图 1-6、图 1-7、和 图 1-8 所示的类层次描述了这些类的逻辑分组及 其继承关系。 图 1-6 Foundation 类层次—Objective-C(第一部分) 图 1-7 Foundation 类层次—Objective-C(第二部分) ????:http://www.apple.com.cn/developer/Documentation/index.html ??:http://www.aisidechina.com/forum/ 图 1-8 Foundation 类层次—Objective-C(第三部分) ????:http://www.apple.com.cn/developer/Documentation/index.html ??:http://www.aisidechina.com/forum/ 上面这些框图按照如下范畴(和下文提到的其它关联关系)将 Foundation 框架中的类进行逻辑分类: 值对象。值对象封装了各种类型的数据,提供对数据进行访问和各种操作的途径。因为它们都是 对象,所以可以对它们(和它们包含的数值)进行归档和分发。NSData类为

该用户的其他资料

  • 名称/格式
  • 评分
  • 下载次数
  • 资料大小
  • 上传时间

用户评论

0/200
    暂无评论
上传我的资料

相关资料

资料评价:

/ 176
所需积分:5 立即下载
返回
顶部
举报
资料
关闭

温馨提示

感谢您对爱问共享资料的支持,精彩活动将尽快为您呈现,敬请期待!