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

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

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

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

职业精品

(汽车)产品营销策划书范文.doc

HH牙膏营销方案策划书.doc

加班管理人力资源考勤管理系统方案.doc

物品采购管理制度-正式.doc

用户评论

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

精彩专题

相关资料换一换

资料评价:

/ 176
所需积分:5 立即下载

意见
反馈

返回
顶部