首页>参考读物>计算机科学与技术>综合

Cocoa设计模式
作者 : (美)Erik M. Buck;Donald A. Yacktman 著
译者 : 陈宗斌 孔祥波 等译
出版日期 : 2010-10-10
ISBN : 978-7-111-31740-1
定价 : 59.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 352
开本 : 16
原书名 : Cocoa Design Patterns
原出版社: Pearson Education Asia
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

Cocoa是苹果的面向对象开发环境,用来生成 Mac OS X 的应用程序。主要的开发语言为 Objective-C,是Mac下进行开发必不可少的开发环境。
本书从众多模式之母MVC模式开始(MVC也是Mac和iPhone开发的核心),详细介绍了在Cocoa开发中可能遇到的各种核心设计模式,并给出了实用的例子和有用的代码进行阐释说明。
本书刚出版就登上了Amazon图书4000名,开发类75名的榜单,具有很大的上升潜力。

图书特色

Cocoa设计模式
COCOA DESIGN
PATTERNS
(美) Erik M. Buck
Donald A. Yacktman 著
陈宗斌 孔祥波 等译

封面:
Cocoa及其面向对象的框架大揭密

封底:
对于Cocoa框架的庞大和复杂,Mac和iPhone开发者常常不知所措。虽然Cocoa看起来很庞大,但是一旦理解了它所使用的面向对象的模式,你就会发现它极其出色,也非常简单可靠。
本书首先介绍了所有模式的起源,即“模型—视图—控制”模式,它是所有Mac和iPhone开发的核心,因此从一开始就牢固掌握它非常重要。

本书列出了将在Cocoa中用到的主要设计模式,包括:
基础模式,如枚举器、访问器和两阶段创建;
增强模式,如单例模式、委托模式和响应链;
隐藏复杂性的模式,如程序包、类集群、代理和转发,以及控制器。

这些还不是全部!本书精心列出了28种设计模式,并包含一些依然有效的示例代码。本书还讲解了Core Data模型、Appkit视图,以及绑定和控制器。
本书利用Objective-C和Cocoa框架的基础,清晰地定义了每种模式能解决的问题,所有Mac和iPhone 开发者都应该学习。
作者简介
Erik M. Buck 于1993年成立EMB&Associates公司,并利用NeXT/Apple的软件技术逐渐成长为航空和娱乐软件领域的领导者,该技术已演变为苹果公司的Cocoa框架。他对Cocoa的邮件列表和技术论坛均有很多贡献,同时还参与编写了《Cocoa Programming》。
Donald A. Yacktman 自1991年已开始专门使用Cocoa及其前身技术OpenStep和NextStep。他参与编写了《Cocoa Programming》,是Stepwise网站的作者和编辑。目前他是一位独立的咨询师,协助Cocoa和iPhone应用程序的设计和实施工作。

图书前言

Apple的Cocoa软件所包含的多数技术从1988年开始就已经投入商业应用,虽然Cocoa可能不够完善,但仍然具有革命性意义。它已在市场上得到广泛应用,如 NEXTSTEP、OPENSTEP、Rhapsody 和 Yellow Box 等都应用了该技术。Cocoa由一系列可重用的软件框架组成,包含用于构建 Mac OS X 桌面和手机应用程序的对象和相关资源。近年来,Apple对Cocoa进行了显著的扩展并添加了新的软件开发工具,从而在Cocoa已经提供的高水平性能的基础上进一步提高了程序员的效率。
  很多程序员在第一次使用此框架时,面对宽泛和复杂的Cocoa通常会不知所措。Cocoa包含大量的功能部件,但在一致性方面表现却十分出色,这要归功于在Cocoa的设计中应用了模式。了解这些模式才能更有效地使用框架,并在编写自己的应用程序时作为指导。
  本书介绍了Cocoa框架中用到的面向对象的设计模式。设计模式不是Cocoa的专利,它在很多可重用的软件库和软件开发环境中均有所应用。设计模式能识别那些重复出现的软件问题和解决它们的最佳做法。本书的主要目的是提供有关设计的专业知识和Cocoa的基本原理,掌握了这些知识,你就可以在自己的软件中高效地重用那些可靠的正确模式,即使你用的并非Cocoa。
什么是设计模式
  设计模式为那些重复出现的编程问题提供了高质量的实用解决方案。设计模式并不需要特别高深的编程技巧。它们只是一个工具箱,其中包含了经过多年的优化后格式更为简洁的可重用解决方案和最佳做法,并为程序员提供可以在向他人解释复杂的软件时使用的词汇表或简单实例。设计模式并不描述特定的算法或数据结构,比如通常在个别类中实现的链表或变长数组,也不描述特定的应用程序设计,尽管本书中提供了一些示例。它所要提供的是一个具有连贯性的“地图”,从而指导你使用Cocoa进行设计。设计模式显示了为什么那些最好且最常用的软件要按其固有的方式设计,又是如何设计出来的。
  设计模式至少包括4个基本要素:
   模式名称
   对模式的动机或它所能解决的问题的简短描述
   对Cocoa中的模式和示例的详细描述
   使用此模式的成果
  本书的第一、三和四部分包含设计模式的目录。模式目录中的每一章都介绍了一个设计模式,并提供了解和重用此模式所需要的关键信息。
  模式名称有助于开发者之间进行有效的沟通。向同事说明某个系统或编写设计文档时,共享的模式名称词汇表是至关重要的。命名的模式清晰地阐述了其设计的主旨和含义,以及设计背后的基本原理,但仅用很少的语言来表达。
  熟悉模式的程序员能立即推断出命名模式的各个对象的用途和限制,以及它所采用的总体设计及其成果。
  Apple的文档有时会在类引用和程序员指南中使用设计模式名称,但此文档不一定会解释这些模式是什么或者它们对于开发者有什么意义。此外,Apple经常使用自己的设计模式名称,而不是业界常用的术语。有时这些术语的差别是由于不同组织同时发现所导致的;还有另外一种情况:有些模式是在Cocoa或它的前身NEXTSTEP中得到认可的,但后来行业改变了其原有名称。本书所描述的模式既使用Apple的术语,也包含业界常用名称,这样你就可以发现两者间的关联。
  每个设计模式都包含对问题的描述和应用此模式的动机。有些模式还包含建议使用此模式的提示问题列表。由于Cocoa包含很多适用于各种情况的模式,因此这些模式都经过了良好的组织,以确保同一问题在不同情境下发生时能够快速识别。有时候,也会识别那些本应避免的相关模式。
  最后,每个模式都说明了正常情况下使用此模式后应取得的成果。此成果和设计备选方案的权衡对于评估在某个特定情况下该使用哪个模式十分关键。
为什么关注设计模式
  在使用像Cocoa这么庞杂的软件技术时,很容易忽视技术本身的总体架构和基本原理。对于Cocoa所提供的众多类、方法和数据结构,很多程序员都会感到茫然。正如俗语所说:“只见树木,不见森林。”Cocoa中使用的模式为程序员提供了便于寻找方向的结构和条理。即使在关于单个类的文档中并没有完整地描述与其他类之间的关系,这些模式也能向程序员表明如何重用那些协作类群组。
  面向对象编程的目标是在控制成本的同时,通过缩短软件开发周期使程序员的效率最大化。实现这一目标要用的主要技术就是对象重用。对象重用可以为程序员节省时间,因为如果不重用,每个新项目都要重新实现此对象。对象重用的另一好处是当需要新功能或发现了某些缺陷时,你只需修改少量对象,而且这些修改还能使依赖该对象的其他项目获益。最重要的是,通过对象重用,解决新问题所需的代码总数减少了,这意味着需要维护的代码数量也会相应地减少。
  设计模式确定了很多成功的策略,可以实现在更多对象(而非单个对象)中的重用。这些模式本身以及模式所涉及的所有对象都已经验证过,且已被重用过多次。坚持使用Cocoa的设计模式能为Cocoa程序员带来更高的效率。
  Cocoa中的模式为设计各种不同类型的应用程序均提供了指导。Cocoa包含很多设计精良的软件,即使不用Cocoa,遵循Cocoa所使用的模式也会使你成为一个更优秀的程序员。
  本书能满足你的求知欲。设计模式不仅回答了“为什么”,还包括了“是什么”和“怎样做”。了解如何应用模式以及为什么模式有助于提高效率能为程序员的日常工作增加更多乐趣。
设计的指导原则
  本书中描述的所有设计模式都有一些共性。在每个案例中,模式的目标都是以整体和可重用的方式解决问题。有些设计指导原则有助于确保模式在不同的情境下得到灵活应用。用于设计单个对象的策略也适用于设计模式。实际上,包含多个对象的模式从优秀的面向对象的设计中获得的好处比简单系统更多。模式存在的原因之一是帮助确保靠重用模式提高的效率大于使用单个对象——总和大于个体。
最小化耦合
  设计的总体目标之一是要尽量减少类之间的耦合。耦合是指对象之间的依赖。一旦存在这种依赖,就会减少分别重用各个对象的机会。耦合也适用于对象的大系统中所包含的子系统。因此很重要的一点是,尽量避免设计中出现耦合。
  Cocoa的所有设计模式能存在的部分原因在于它限制或避免了耦合。例如,本书第一部分中描述的“模型-视图-控制器(Model-View-Controller,MVC)”模式是一种“可控制一切的模式”,它的使用将贯穿Cocoa的始终,使类的子系统更加有条理,且适用于整个应用程序的设计。MVC模式的主要目的是将复杂的对象系统分解为3个主要的子系统,并尽量减少各个子系统间的耦合。
设计变更
  使用设计来适应软件系统生命周期中的变化是非常重要的。过于僵硬的设计将会始终限制重用的机会。在最坏的情况下,将会没有任何重用的发生,因为相比于在一个过于僵化的设计中做出更改,重新设计并重新实现这个系统将更为简单。
  预见到某种特定类型的改变并在设计中考虑它们是完全可能的。例如,Cocoa委托模式提供了一种机制,一个对象可以更改,控制另一个对象的行为而无须在它们之间引入耦合的关系。Cocoa提供了许多这种可以被任选的委托对象所控制的对象,而这种模式的关键则是,在设计Cocoa的时候,这些作为委托的对象甚至可能还没有被构思。所有这些各自存在着的Cocoa设计模式都是为了适应变化。那只是Cocoa如此灵活的原因之一。
强调的是接口而不是实现
  接口在对象和这个对象的使用者之间提供了一种形象的协议。一个对象的接口告诉了开发者这个对象可以做什么而不是它是怎么实现的。在诸如Cocoa这种可重用框架的环境中,对象接口必须在当前框架版本和下一个框架版本中保持一致,否则那些用某一个版本的框架所开发的软件,将可能在下一个版本的框架中不能正常工作。对于开发者来说,这种协议是必需的,它使开发者自信地重用框架中的对象,但是任何一个试图来创建一个确实灵活的可重用协议的人都知道,这是一个非常困难的工作。当实现细节成为了对象及其使用者协议的一部分时,那么不破坏向后兼容性而改善对象功能,对于一个框架开发者来说,将会变得非常困难。
找到最佳的粒度
  Cocoa的许多设计模式以不同级别的粒度使用。例如,MVC模式通常适用于在大型子系统中类的协作和整个应用程序中,但是单例模式只用于确认一个类只有一个实例被创建,并且这个实例可被使用。模式的目标是增强软件的可重用性。
  某些问题通过一些只涉及几个类的小型模式而得到了最佳的解决,而另一些问题则需要通过以重用为中心的模式来解决。关键是找到最佳的平衡。通常,大型模式将会具有比小型模式更高的效率,但是如果用一个太过庞大或者太过泛用的模式解决一个特定的狭小问题,那它将是无法使用的。例如,MVC模式对大多数的应用程序有卓越的作用,但是某些特定的应用程序将无法从它的使用中获益,在这些情况下,这个模式是提供不了任何价值的。相对来说,匿名对象、异类容器、枚举器、享元和单例是小型的(模式)且在每一个应用程序中都可以有所作为。Cocoa都是根据适用范围来提供这些模式的。一些模式的描述陈述了Cocoa所碰到的平衡和粒度的难题。
使用复合更优于继承
  不知说过多少次,耦合是敌人。讽刺的是,继承是面向对象编程中最强大的几个工具之一,同时也是导致耦合的主要原因。事实上,没有比一个类和它所继承的父类之间的关系更为紧密的耦合了。在此书中的很多模式分别描述了减少创建子类的需求。通常的规则是当有一个替代继承的方法时,那么使用这个替代方法。
读者对象
  本书适合于正在使用或者考虑使用Mac OS X上的Apple Cocoa框架或者iPhone和iPod touch上的Cocoa Touch框架的读者阅读。另外,本书中的许多信息同样也适用于Linux和Windows上的开源项目GNUStep。
谁应该阅读本书
  Objective-C、C语言、C++和Java程序员都应该看看这本书。你应该熟悉面向对象设计和面向对象技术的常用原则,以便理解和得益于此书中所陈述的设计模式。许多关于Cocoa的设计模式的书着重于描述Objective-C语言的特点,而在本书中不会解释这些;然而,Apple包含了名称为“ The Objective-C 2.0 Programming Language”的文档,还附带了免费的Mac OS Xcode 工具 (http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC)。
  尽管有经验的程序员在阅读本书的时候,可以积累零碎(Objective-C)知识,但是一些Objective-C的知识是要求的,用来理解Cocoa的实现。也就是说,这本书并不是诸如《The Objective-C 2.0 Programming Language》的编程语言参考资料的替代品,尽管对于Cocoa设计模式中用到的语言特性都在模式描述中得到了解释。
你需要知道什么
  本书不需要大师级编程技巧。在Cocoa设计中所用到的模式将会逐块地找到并解释,以便将这个技术公之于众。那些初试Cocoa的开发者将会像那些有经验的老兵一样得益于Cocoa所具有的见解和智慧。然而,如果你对C语言或者C派生语言一窍不通,那么深入分析模式如何工作以及为何如此工作是十分困难的。你需要熟悉类、实例、封装、多态性、继承这些面向对象的概念。如果没有面向对象软件开发的技术基础,可能会很难理解本书中对于Cocoa的好处、成果和权衡的深入描述。
  本书假设你知道C语言、C + +或Java,并且熟悉面向对象的软件开发。如前所述,你需要知道Objective-C,以获得这本书中的最大价值,但也可以在前进的道路上学习Objective-C。
  你需要运行安装了Apple的Xcode工具的Mac OS X系统。如果你没有在系统中安装Xcode工具,你可以通过以下方式获得它们:
如果你购买新的Mac硬件或盒装的Mac OS X的版本,Xcode工具可以在安装DVD的可选安装文件夹中找到。
   对于Mac OS X Leopard(版本10.5),在Xcode工具文件夹中,双击XcodeTools.mpkg文件来安装Xcode。
   对于Mac OS X Snow Leopard(版本10.6),可双击Xcode.mpkg文件来安装Xcode。
   最新的Xcode工具均提供给了 Mac开发人员计划中的免费网上会员,而 Mac开发人员计划是Apple开发人员联盟(ADC)的一部分( http://developer.apple.com/)。在你注册之后,你可以从ADC网站的Xcode工具(请记住,下载文件大小在1GB左右,所以你需要一个快速的网络连接)。
  注意 如果你是为iPhone或iPod Touch执行开发工作,你需要注册iPhone开发人员计划(http://developer.apple.com/iphone),在你登录之后,下载并安装 iPhone的iPhone软件开发工具包(SDK)。iPhone 3.0 SDK需要一台基于英特尔的Mac,这意味着它不能在旧的PowerPC的Mac使用(如使用G3、G4或G5处理器的Mac电脑)。 iPhone的SDK是适用于Mac OS X Leopard中(版本10.5)和Mac OS X的雪豹(版本10.6)。
  本书基于Mac OS X(版本10.5),但最终你会希望当在任何的Mac OS X、iPhone、iPod Touch 或者Windows和Linux上的GNUStep中创建应用程序时,利用Cocoa的设计模式。
本书组织结构
  本书分为5个部分。第一部分“一种可控制一切的模式”描述了模型-视图-控制器模式,提供了Cocoa的总体结构和组织方式,以及大多数使用Cocoa的应用程序。第二部分“基础模式”标识Cocoa中与所有其他模式构建的模式。第三部分“主要通过解耦来变得更强大的模式”包含了能够使你控制和扩展对象而不会引入不必要的耦合的模式。第四部分“主要用于隐藏复杂性的模式”解释模式的隐藏复杂性和实现细则,使程序员可以自信地专注于解决问题。第五部分“模式应用的实用工具”通过描述从Cocoa框架当中选出来的示例, 说明了MVC设计模式的实际应用。附录“资源”提供了使用和理解Cocoa与设计模式的其他参考资料。
致  谢
  来自Erik M. Buck的致谢
  如果没有Erich Gamma、Richard Helm、Ralph Johnson和John M. Vlissides所著的《Design Patterns: Elements of Reusable Object-Oriented Software》一书的激励和开拓,本书将不可能问世。
  如果没有Cocoa框架体现的令人吃惊的设计和工程成就,本书也没有存在的理由。从1988年的NEXTSTEP 0.8到1997年的用于Windows NT、Solaris和HPUX的OPENSTEP Enterprise 4.2,再到2001年的Mac OS X和2007年的iPhones,Cocoa的创建者在持续不断地改进Cocoa,同时为优雅和一致性设定了前所未有的高标准。
  如果没有Apple的Cocoa-dev邮件列表的订阅者加入的Cocoa开发人员社区、无数信息丰富的与Cocoa相关的博客以及第三方应用程序开发人员的倾情奉献和友爱,本书将不会有读者关注。
来自Donald A. Yacktman的致谢
  我想感谢我的家人,感谢他们的耐心和支持,还要感谢社区中在过去几年帮助我学习的那些人。

上架指导

计算机\程序设计

封底文字

Cocoa 及其面向对象的框架大揭密
对于 Cocoa 框架的庞大和复杂,苹果和 iPhone 开发者常常不知所措。虽然 Cocoa 确实很庞大,不过一旦你理解了它所使用的面向对象的模式,就会发现它极其出色,也非常简单可靠。
本书首先介绍了所有模式的起源,即“模型-视图-控制”模式,它是所有苹果和 iPhone 开发的核心。有时候苹果的开发工具必须采用这一模式,因此一开始时就牢固地掌握它非常重要。
本书的中间部分列出了将在 Cocoa 中用到的主要设计模式,包括:
基础模式,如枚举器、访问器和两阶段创建
增强模式,如单例模式、委托模式和响应链
隐藏复杂性的模式,如程序包、类集群、代理和转发,以及控制器。
这些还不是全部!本书精心地列出了 28 种设计模式,并包含一些如今仍可以在程序中应用的示例代码。本书还讲解了 Core Data 模型、Appkit 视图,以及绑定和控制器。
本书利用 Objective-C 和 Cocoa 框架的基础,清晰地定义了每种模式能解决的问题,所有 Mac 和 iPhone 开发者都可能用到。

作者简介

(美)Erik M. Buck;Donald A. Yacktman 著:Aaron Hillegass Big Nerd Ranch 公司创始人,《Cocoa Programming for Mac OS X》的作者 Erik M. Buck – 于 1991 年成立 EMB&Associates 公司,并利用 Next/苹果公司的软件技术逐渐成长为航空和娱乐软件领域的领导者,该技术已演变为苹果的 Cocoa 框架。他对 Cocoa 的邮件列表和技术论坛均有很多贡献,同时还参与编写了《Cocoa 编程》。 Donald A. Yacktman 自 1991 年已开始专门使用 Cocoa 及其前身技术 OpenStep 和NextStep。他参与编写了《Cocoa 编程》,是 Stewise 网站的作者和编辑。目前他是一名独立的咨询师,协助 Cocoa 和 iPhone 应用程序的设计和实施工作。

译者简介

陈宗斌 孔祥波 等译:暂无简介

译者序

Apple的Cocoa软件具有革命性的意义。Cocoa由一系列可重用的软件框架组成,包含用于构建基于Mac OS X的桌面和手机应用程序的对象和相关资源。近年来,Apple对Cocoa进行了显著的扩展并添加了新的软件开发工具,从而在Cocoa已经提供的高水平性能的基础上进一步提高了程序员的效率。
  本书介绍了Cocoa框架中用到的面向对象的设计模式。设计模式为那些重复出现的编程问题提供了高质量的实用解决方案。设计模式并不需要特别高深的编程技巧。它只是一个工具箱,其中包含了经过多年的优化后格式更为简洁的可重用解决方案和最佳做法,并为程序员提供可以在向他人解释复杂的软件时使用的词汇表或简单实例。
  需要说明的是,设计模式不是Cocoa的专利,它在很多可重用的软件库和软件开发环境中均有所应用。设计模式能识别那些重复出现的软件问题和解决它们的最佳做法。本书的主要目的是提供有关设计的专业知识和Cocoa的基本原理,掌握了这些知识,你就可以在自己的软件中高效地重用那些可靠的正确模式,即使你采用的并非Cocoa。
  本书共分为5个部分,按照由浅入深、循序渐进的原则详细介绍各种设计模式在Cocoa中的应用,并且提供了丰富的代码示例,方便读者学习本书内容。本书最后还包含一个附录,提供了使用和理解Cocoa与设计模式的其他参考资料。
  本书适合于正在使用或者考虑使用Mac OS X上的Apple Cocoa框架或者iPhone和iPod touch上的Cocoa Touch框架的读者阅读。本书中的许多信息同样也适用于Linux和Windows上的开源项目GNUStep。另外,Objective-C、C语言、C++和Java程序员都可以从本书中获益。
  参加本书翻译的人员有:陈宗斌、孔祥波、戴锋、许瑛琪、张景友、易小丽、陈婷、管学岗、王新彦、金惠敏、张海峰、徐晔、张德福、张士华、张锁玲、杜明宗、高玉琢、王涛、申川、孙玲、李振国。
  由于时间紧迫,加之译者水平有限,疏漏在所难免,恳请广大读者批评指正。

译者
2010年6月

图书目录

译者序

前言
作者简介
第一部分 一种可控制一切的模式
第1章 模型-视图-控制器 2
1.1 Cocoa中的MVC3
1.1.1 模型子系统的核心数据支持3
1.1.2 视图子系统的应用程序工具箱支持4
1.1.3 控制器子系统的应用程序工具箱支持6
1.1.4 Cocoa的文本架构7
1.1.5 Cocoa的文档架构7
1.1.6 Cocoa编写脚本的能力10
1.1.7 Cocoa的偏好窗格架构11
1.1.8 Quartz Composer的架构11
1.1.9 QTKit的架构12
1.2 小结12
第2章 分析和应用MVC13
2.1 非MVC设计13
2.2 MVC设计17
2.3 小结21
第二部分 基 础 模 式
第3章 两阶段创建24
3.1 动机24
3.2 解决方案25
3.2.1 分区26
3.2.2 初始化已分配的内存26
3.2.3 实现指定的初始化方法27
3.2.4 在初始化方法中使用分区29
3.2.5 创建临时实例30
3.3 Cocoa中的示例31
3.4 后果35
第4章 模板方法36
4.1 动机36
4.2 解决方案36
4.2.1 默认模板方法38
4.2.2 利用模板方法进行设计38
4.3 Cocoa中的示例38
4.3.1 使用-drawRect:模板方法39
4.3.2 其他Cocoa模板方法39
4.4 后果42
第5章 动态创建43
5.1 动机43
5.2 解决方案43
5.2.1 使用动态创建43
5.2.2 用动态创建实现插件架构49
5.3 Cocoa中的示例50
5.4 后果50
第6章 类别52
6.1 动机52
6.2 解决方案52
6.2.1 非正式协议55
6.2.2 匿名类别56
6.2.3 代码组织57
6.2.4 何时使用类别与子类化57
6.3 Cocoa中的示例57
6.3.1 把类别用于组织58
6.3.2 把类别用于非正式协议58
6.3.3 把类别用于框架划分60
6.4 后果61
6.4.1 方法冲突61
6.4.2 替换方法61
6.4.3 软件维护62
第7章 匿名类型和异类容器63
7.1 动机63
7.2 解决方案63
7.2.1 匿名类型64
7.2.2 赋值66
7.2.3 异类容器67
7.3 Cocoa中的示例68
7.4 后果68
第8章 枚举器70
8.1 动机70
8.2 解决方案70
8.2.1 使用枚举器对象70
8.2.2 使用快速枚举71
8.2.3 创建自定义的枚举器72
8.2.4 实现快速枚举76
8.2.5 内部枚举79
8.3 Cocoa中的示例80
8.4 后果80
第9章 执行选择器和延迟执行82
9.1 动机82
9.2 解决方案82
9.2.1 延迟执行84
9.2.2 Objective-C消息发送的实现85
9.3 Cocoa中的示例86
9.4 后果87
第10章 访问器89
10.1 动机90
10.2 解决方案90
10.2.1 引用计数的内存管理91
10.2.2 管理保留计数的访问器92
10.2.3 将内存管理限制在访问器中95
10.2.4 可变性95
10.2.5 NSKeyValueCoding97
10.2.6 Interface Builder插座变量98
10.2.7 Objective-C 2.0的属性98
10.3 Cocoa中的示例98
10.4 后果101
第11章 归档和解档102
11.1 动机102
11.2 解决方案102
11.3 Cocoa中的示例105
11.3.1 实现NSCoding协议106
11.3.2 编码和解码非对象类型108
11.3.3 对象替换110
11.3.4 nib意识110
11.4 后果111
第12章 复制112
12.1 动机112
12.2 解决方案114
12.3 Cocoa中的示例116
12.3.1 实现NSCopying116
12.3.2 实现深复制117
12.3.3 实现NSMutableCopying118
12.3.4 必需的复制119
12.3.5 复制Objective-C 2.0的属性119
12.3.6 避免使用NSCopyObject()121
12.4 后果121
第三部分 主要通过解耦来变得更强大的模式
第13章 单例124
13.1 动机124
13.2 解决方案124
13.2.1 封装共享资源124
13.2.2 创建和访问共享实例126
13.2.3 控制实例化127
13.2.4 取消分配129
13.2.5 确定是否创建了单例130
13.2.6 线程安全130
13.2.7 与Interface Builder协作130
13.3 Cocoa中的示例131
13.4 后果132
第14章 通知133
14.1 动机133
14.2 解决方案134
14.2.1 MYNotification类134
14.2.2 MYNotificationCenter类135
14.2.3 联合存储140
14.3 Cocoa中的示例140
14.3.1 全局通知名称140
14.3.2  “Will”和“Did”通知141
14.3.3 同步通知与异步通知141
14.3.4 分布式通知143
14.4 后果144
第15章 委托146
15.1 动机146
15.2 解决方案149
15.2.1 实现委托支持150
15.2.2 实现委托155
15.2.3 数据源156
15.3 Cocoa中的示例157
15.4 后果157
第16章 层次结构159
16.1 动机159
16.2 解决方案159
16.2.1 实现层次结构160
16.2.2 Cocoa视图层次结构162
16.2.3 视图层次结构中的坐标系统163
16.2.4 浏览视图层次结构164
16.3 Cocoa中的示例171
16.4 后果171
第17章 插座变量、目标和动作172
17.1 动机173
17.2 解决方案173
17.2.1 插座变量176
17.2.2 目标176
17.2.3 动作176
17.2.4 动作和响应者链178
17.3 Cocoa中的示例179
17.4 后果181
第18章 响应者链183
18.1 动机183
18.2 解决方案183
18.2.1 术语183
18.2.2 响应者链184
18.2.3 扩展的响应者链185
18.2.4 遍历扩展的响应者链187
18.2.5 插入对象到响应者链中188
18.2.6 利用响应者链189
18.3 Cocoa中的示例191
18.4 后果191
第19章 联合存储192
19.1 动机192
19.2 解决方案192
19.3 Cocoa中的示例195
19.3.1 引用计数的内存管理195
19.3.2 键值编码198
19.4 后果198
第20章 调用200
20.1 动机200
20.2 解决方案200
20.2.1 方法签名200
20.2.2 使用NSInvocation对象201
20.2.3 使用计时器205
20.2.4 延迟的消息发送209
20.3 Cocoa中的示例210
20.4 后果211
第21章 原型212
21.1 动机212
21.2 解决方案212
21.3 Cocoa中的示例214
21.3.1 使用MYLabeledBarCell实例作为原型214
21.3.2 使用MYColorLabeledBarCell实例作为原型216
21.4 后果218
第22章 享元219
22.1 动机219
22.2 解决方案219
22.3 Cocoa中的示例219
22.3.1 封装非对象值220
22.3.2 减少存储需求220
22.3.3 替代其他对象221
22.4 后果222
第23章 装饰器223
23.1 动机224
23.2 解决方案224
23.3 Cocoa的示例225
23.4 后果226
第四部分 主要用于隐藏复杂性的模式
第24章 包228
24.1 动机228
24.2 解决方案228
24.3 Cocoa中的示例230
24.4 后果232
第25章 类簇233
25.1 动机233
25.2 解决方案233
25.3 Cocoa中的示例237
25.3.1 子类化类簇的公共接口类238
25.3.2 NSString的MYShortString子类239
25.3.3 从MYShortString获得的经验教训248
25.4 后果248
第26章 外观250
26.1 动机250
26.2 解决方案251
26.3 Cocoa中的示例254
26.3.1 文本外观254
26.3.2 图像外观255
26.3.3 持久存储外观255
26.3.4 用户交互外观256
26.4 后果257
第27章 代理和转发258
27.1 动机258
27.2 解决方案258
27.2.1 实现转发258
27.2.2 代理259
27.2.3 高阶消息265
27.3 Cocoa中的示例270
27.4 后果270
第28章 管理者271
28.1 动机271
28.2 解决方案271
28.2.1 扩展单例模式272
28.2.2 添加其他管理者特性275
28.3 Cocoa中的示例277
28.4 后果277
第29章 控制器279
29.1 动机279
29.2 解决方案279
29.2.1 MYShapeDraw模型子系统280
29.2.2 MYShapeDraw视图子系统281
29.2.3 MYShapeEditor控制器子系统283
29.2.4 扩展MYShapeDraw视图子系统以进行编辑292
29.2.5 重新设计和泛化解决方案294
29.3 Cocoa中的示例299
29.4 后果300
第五部分 模式应用的实用工具
第30章 核心数据模型304
30.1 模型子系统的角色304
30.2 核心数据的术语305
30.2.1 实体305
30.2.2 特性305
30.2.3 关系306
30.2.4 属性306
30.3 核心数据内模式之间的协作307
30.3.1 NSManagedObject和NSEntityDescription307
30.3.2 设计核心数据模型312
30.3.3 NSManagedObjectContext312
30.3.4 NSPersistentStoreCoordinator和NSPersistentStore313
30.4 核心数据的局限性和好处314
第31章 应用程序工具箱视图315
31.1 视图子系统的角色315
31.2 应用程序工具箱内的模式之间的协作316
31.2.1 NSApplication、事件和运行循环316
31.2.2 响应者317
31.2.3 响应者链317
31.2.4 NSWindow概述318
31.2.5 NSView概述319
31.2.6 目标和动作321
31.2.7 归档的对象和nib322
31.2.8 撤销和重做324
31.2.9 管理者324
31.3 应用程序工具箱的局限性和好处325
第32章 绑定和控制器326
32.1 绑定和控制器的角色326
32.1.1 绑定避免耦合328
32.1.2 结合使用控制器与绑定的重要性328
32.2 绑定和控制器内的模式之间的协作329
32.2.1 在-bind:toObject:withKeyPath:options:中发生了什么事情330
32.2.2 键值观察如何检查对所观察属性的更改使得观察对象可以得到通知330
32.2.3 在观察的属性的值改变时发送什么消息来通知注册的观察者331
32.3 绑定和控制器的局限性和好处333
附录 资源334

教学资源推荐
作者: [美]怀亚特·S. 纽曼(Wyatt S. Newman) 著
作者: (法)Stephane Mallat 等著 巴黎综合理工大学
作者: (美)Philip J.Pratt
参考读物推荐
作者: (美)Vincent Bumgarner 著
作者: (英)Stephen R.Palmer,John M.Felsing
作者: 华诚科技 编著
作者: 高群凯