譯者序
序
前言
作者簡介
第一部分 一種可控製一切的模式
第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
· · · · · · (
收起)