Cocoa设计模式

当前位置:首页 > 计算机网络 > 网络与数据通信 > Cocoa设计模式

出版社:机械工业出版社
出版日期:2010年11月
ISBN:9787111317401
作者:Erik M. Buck,Donald A. Yacktman
页数:356页

章节摘录

插图:第一部分一种可控制一切的模式第1章模型-视图-控制器模型-视图-控制器(MVC)是世界上最古老、最成功的可复用软件设计模式之一。它最初出现在20世纪70年代的Smalltalk编程语言中。MVC定义了Cocoa框架的总体结构。它是一种高级别的模式,能将多个协作对象的大型群组划分为独立的子系统:模型、视图和控制器。分析通用应用程序的功能和行为,有助于理解子系统在MVC模式中担当的角色。多数应用程序存储信息、检索信息,并将信息呈现给用户,使用户能够编辑或操纵信息。在面向对象的应用程序中,信息不只是字节,对象会将信息与使用该信息的方法封装在一起。应用程序中的每个对象都应该符合且仅符合以下子系统之一:·模型。模型子系统由为应用程序提供独特功能和信息存储的对象组成。模型包含处理应用程序数据的所有规则。模型是使应用程序体现其价值的关键子系统。保证模型子系统的独立而不依赖于视图或者控制器子系统非常关键。·视图。视图子系统用于展示从模型中收集的信息,并为用户提供与此信息交互的方式。理解视图的关键是要知道总是有大量视图存在。例如,可能有图形用户界面视图、打印报表视图、命令行视图、基于Web的视图以及脚本语言视图,它们都与同一个模型交互。·控制器。控制器的目的是解除模型和视图之间的耦合。用户与视图交互的结果是向控制器子系统发出请求,还可能会进一步请求改变模型中的信息。控制器还要处理数据的转换和格式,以呈现给用户。例如,模型中可能以米存储数据,但根据用户的偏好,控制器可能要将数据转换为英尺。模型可能将对象存储在无序集合中,但控制器可能会先为这些对象排序,然后再转到视图中展示给用户。

前言

Apple的Cocoa软件所包含的多数技术从1988年开始就已经投入商业应用,虽然Cocoa可能不够完善,但仍然具有革命性意义。它已在市场上得到广泛应用,如NEXTSTEP、OPENSTEP、Rhapsody和Yellow Box等都应用了该技术。Cocoa由一系列可重用的软件框架组成,包含用于构建Mac OS X桌面和手机应用程序的对象和相关资源。近年来,Apple对Cocoa进行了显著的扩展并添加了新的软件开发工具,从而在Cocoa已经提供的高水平性能的基础上进一步提高了程序员的效率。很多程序员在第一次使用此框架时,面对宽泛和复杂的Cocoa通常会不知所措。Cocoa包含大量的功能部件,但在一致性方面表现却十分出色,这要归功于在Cocoa的设计中应用了模式。了解这些模式才能更有效地使用框架,并在编写自己的应用程序时作为指导。本书介绍了Cocoa框架中用到的面向对象的设计模式。设计模式不是Cocoa的专利,它在很多可重用的软件库和软件开发环境中均有所应用。设计模式能识别那些重复出现的软件问题和解决它们的最佳做法。本书的主要目的是提供有关设计的专业知识和Cocoa的基本原理,掌握了这些知识,你就可以在自己的软件中高效地重用那些可靠的正确模式,即使你用的并非Cocoa。

内容概要

Erik M. Buck于1993年成立了EMB & Associates公司,并且通过利用后来成为Apple的Cocoa框架的NeXT/Apple软件技术,把公司建设成太空和娱乐软件业中的领导者。Buck先生的工作还涉及建筑业、给8中级学生讲授科学、展览油画肖像,以及开发可替代燃料汽车。Buck先生在2002年出售了他的公司,目前是Northrop Grumman Corporation公司的高级雇员。Buck先生在1991年从代顿大学获得了计算机科学学士学位,并且是Cocoa邮件列表和技术论坛一名活跃的撰稿人。
Donald A. Yacktman从1991年起就专业地使用Cocoa及其原先的技术:OpenStep和NextStep。他参与合著了《Cocoa Programming》一书,并且作为作者和编辑为Stepwise Web站点工作。他在过去为Verio/iServer和illumineX工作。目前,他是一名独立顾问,为Cocoa和iPhone应用程序的设计和实现提供帮助。Yacktman先生分别于1991年和1994年从杨百翰大学获得了电子和计算机工程学士和硕士学位。

书籍目录

译者序

前言
作者简介
第一部分 一种可控制一切的模式
第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

作者简介

本书介绍了Cocoa框架中用到的面向对象的设计模式。Cocoa框架是Apple的面向对象开发环境,用来开发 Mac OS X 的应用程序。主要的开发语言为 Objective-C,它是Mac下进行开发必不可少的开发环境。
本书共分为5个部分,按照由浅入深、循序渐进的原则详细介绍各种设计模式在Cocoa中的应用,并且提供了丰富的代码示例,方便读者学习本书内容。本书最后还包含一个附录,提供了使用和理解Cocoa与设计模式的其他参考资料。
本书适合于正在使用或者考虑使用Mac OS X上的Apple Cocoa框架或者iPhone和iPod touch上的Cocoa Touch框架的读者阅读。本书中的许多信息同样也适用于Linux和Windows上的开源项目GNUStep。另外,Objective-C、C语言、C++和Java程序员都可以从本书中获益。

图书封面


 Cocoa设计模式下载 精选章节试读 更多精彩书评



发布书评

 
 


精彩书评 (总计3条)

  •     很多比较生硬。引用一个:p126 为了具有共享实例,必须更改MYGameHighScoreManager的接口,以便利用实例方法执行管理。具有是不是换个词,执行管理是不是也很不专业!
  •     好好的一本书被翻译成一坨屎,为了利益不知道在哪请的外行翻译的。内容一般般,有一定设计模式经验的没必要看了。
  •     书的内容一般,把COCOA中常见的设计给讲到了,但也仅此而已。书中有些技术点讲解先后顺序可能有问题,明显不是给初学者用的,但是高级开发人员也会觉得用处不大。翻译的非常非常糟糕,很多地方的中文非常的不通顺,语法和英文很接近,相当多的技术名词翻译也有问题。

精彩短评 (总计63条)

  •     看了这本书的翻译,会让人产生一种学习英语的欲望,所以建议再促销本英语书可能更好。
  •     书真的很一般……也许是我水平太差……但看起来确实费解
  •     原著是好书,毋庸置疑。可惜翻译得太差劲了。。。
  •     对cocoa和objc的设计思路做了很详尽的介绍,但是代码都是osx的老代码
  •     包装一般,内容可以
  •     翻译有待提升。
  •     原文内容非常不错,翻译的风格有点乱,有待整理。
  •     还行,对有Cocoa编程经验的人来说,可能比较好。
  •     做iphone游戏,所以恶补一下cocoa相关知识。因为以前很喜欢设计模式,所以才买这本书。草草的读了一遍,一般般吧。 cocoa建立在objective c这么高级的语言基础上,所以很多模式容易实现。恶补apple的东西结束了,都挺没劲!还是花时间看点更深入的书吧
  •     翻译不行 原版五星
  •     不知道有用没有用,买回来看看先
  •     这个翻译就是个2,delegate 直译为插座不好翻你就直接把英文打出来...其他2b翻译比比皆是。建议还是看原版好些。
  •     没怎么仔细看,不过应该还不错
  •     还没仔细看,朋友都说不错
  •     这个翻译是真烂..... 中文到不懂 我还得对着英文看 才明白.....
  •     这本书以前款过一部分,买一半把他看完吧。挺不错的一本书,以Cocoa框架为实例,结合自己的开发经验,更能深刻理解设计模式的精髓,而不仅仅是对设计模式概念的描述。
  •     不多说,是COCOA的设计好书,自己也在研学,难得的一本教材
  •     书是好书,不过翻译的太烂
  •     只看了MVC部分,值得重看一次英文版
  •     如:非MVC到MVC分层代码比较
  •     我还天真的想靠这本书写一下论文...尼玛...语句都不通啊..擦..
  •     1. 看了前几涨,翻译没有想象中糟糕,差点被一些评论给吓到了,有一定Cocoa基础的还是比较容易理解的2. 比较耐看,毕竟是“设计模式”,很多地方看下来还是值得回味思考的,而且也不仅仅局限与Cocoa3. 知其然,知其所以然。早段时间看了 Objective-C 和 Cocoa编程的资料,很多时都只能跟着指引做,过后很可能忘了,看了这本书,能理解了其中的设计思想,有些地方总算是想通了。
  •     很不错的一本书,不管是设计模式还是内容,都很好!
  •     這和那本是一起買的,這本比較好,只有少量的緞紋!
  •     总体而言,本书是从根本上阐述cocoa的本质和模式. 对于开发者的提高有一定的帮助.
  •     经典书籍,值得一买
  •     看看这本书就知道,里面蕴含了很多非常不错的设计。
  •     书不错,翻译得不好
  •     对Cocoa框架讲述的非常深刻,仔细阅读,能加深对iOS开发理解的深度。
  •     不过需要时间才能真正理解
  •     看着还行只不过是mac编程的代码
  •     内容非常经典,但适合有一定Cocoa开发经验的人去读,对于提高非常有帮助。
  •     书还不错, 翻译烂的一B... 你能猜出这些是什么意思么? -> "数据收集""核心数据""有序收集"
  •     书质不错,内容待研究!送货速度快!支持当当
  •     阅读中,感觉还不错
  •     这本书的翻译真是非常非常差劲,如果读者不熟悉设计模式的话看起来比较费劲,建议阅读英文原版。拜托译者认真一些。翻译的不通顺,生硬。严重怀疑译者是用翻译软件翻译后再进行修改来完成翻译的。
  •     外面虽然下大雨,但是我还是抱着这本书看了会.内容还是可以
  •     还可以
  •     翻译的实在是看不下去。
  •     翻译一般,这本书适合在有一定的cocoa开发经验后阅读
  •     还行吧,就是没有时间看。
  •     写的不错,看完了,收获不少。
  •     不错的COCOA书
  •     感觉写的比较啰嗦不够精炼
  •     翻译的够烂,谨慎购买
  •     帮老公定的,说翻译的不好,基本上是按照字面翻译,看起来比较费劲
  •     还不错 虽然讲的是cocoa,但和cocoa touch也差不多一致,可加深理解
  •     看书还是看经典的,否则会有一种培训班的感觉
  •     不是我想要的,但看看也无妨
  •     书的翻译很烂。内容不错,如果可以最好读英文原版。
  •     非常好的COCOA学习资料
  •     ruchao
  •     有些地方,比如框架的名字,还是保持英文好一点,不然看着别扭。
  •     最全讲解的设计模式
  •     有一些项目经验了,看看设计模式,对将来编码有很大的帮助。程序可以以不同方式实现,但是要选择最优的,那么就看设计模式吧。
  •     有点反复.
  •     如果说KDE是集市里造教堂,apple的技术积淀就是Lost Temple…另外对译者不应太苛责,翻译本身就是一种原罪,越勤奋越容易出现这类句子:『要实现子类以确保正确初始化实例的唯一方法是覆盖每一个已继承的初始化方法』、
  •     还没开始看呢,大概翻了一下,用的着。
  •     Cocoa设计模式
  •     主要讲的cocoa内的各种模式实现,对模式的应用没有具体的讲解,作为初学Mac 或者 iOS开发看还不错
  •     学习ios的好书,终生受用。。
  •     翻译的太骚了
  •     正在翻看,里面讲了很多“为什么”的问题。对类库会更清楚。
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024