译者序
序
前言
作者简介
第一部分 一种可控制一切的模式
第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
· · · · · · (
收起)