第1章 麵嚮對象的編程 1
1.1 對象的概念 2
1.1.1 麵嚮功能的軟件設計的局限性 2
1.1.2 麵嚮對象的模塊化 2
1.1.3 消息傳遞 3
1.1.4 模塊的抽象化 4
1.1.5 對象的屬性 5
專欄 麵嚮對象的方方麵麵 5
1.1.6 類 6
專欄 Cocoa和Objective-C的曆史 8
1.2 模塊和對象 8
1.2.1 軟件模塊 8
1.2.2 高獨立性的模塊 9
1.2.3 模塊的信息隱蔽 9
1.2.4 類的定義和接口 10
1.2.5 消息發送的實現 10
專欄 C語言的新標準 11
第2章 Objective-C程序設計 13
2.1 對象和消息 14
2.1.1 消息錶達式 14
2.1.2 消息選擇器 15
2.1.3 實例變量的生成和初始化 16
2.2 類的定義 17
2.2.1 類的接口聲明 17
專欄 各種各樣的布爾類型 18
專欄 不指定方法的返迴值 18
2.2.2 類的實現 19
2.2.3 一個遙控器的例子 19
2.3 編譯 21
2.3.1 簡單的編譯方法 21
2.3.2 多文件編譯 23
2.4 程序的書寫風格 24
2.4.1 混閤編程 24
2.4.2 C語言函數的使用方法 25
2.4.3 靜態變量的定義 26
2.4.4 頭文件的引入 26
專欄 參考文檔和SDK 27
專欄 Xcode的安裝 28
第3章 類和繼承 29
3.1 繼承的概念 30
3.1.1 父類和子類 30
3.1.2 類的層次結構 31
3.2 利用繼承定義新類 32
3.2.1 繼承的定義 32
3.2.2 類定義和頭文件 33
3.2.3 繼承和方法調用 34
3.2.4 調用父類的方法 34
3.2.5 初始化方法的定義 35
3.3 使用繼承的程序示例 36
3.3.1 追加新方法的例子 36
3.3.2 方法重寫的例子 37
3.4 繼承和方法調用 38
3.4.1 使用self調用方法 38
3.4.2 使用super調用方法 39
3.4.3 測試程序 40
3.5 方法定義時的注意事項 41
3.5.1 局部方法 41
3.5.2 指定初始化方法 42
專欄 Objective-C與開源軟件 44
第4章 對象的類型和動態綁定 45
4.1 動態綁定 46
4.1.1 什麼是動態綁定 46
4.1.2 多態 47
4.2 作為類型的類 48
4.2.1 把類作為一種類型 48
4.2.2 空指針nil 49
專欄 關係錶達式 50
4.2.3 靜態類型檢查 51
4.2.4 靜態類型檢查的總結 53
4.3 編程中的類型定義 54
4.3.1 簽名不一緻時的情況 54
專欄 重載 55
4.3.2 類的前置聲明 56
4.3.3 強製類型轉換的使用示例 57
4.4 實例變量的數據封裝 58
4.4.1 實例變量的訪問權限 58
4.4.2 訪問器 60
4.4.3 實例變量的可見性 61
4.4.4 在實現部分中定義實例變量 62
4.5 類對象 63
4.5.1 什麼是類對象 63
4.5.2 類對象的類型 64
4.5.3 類方法的定義 65
4.5.4 類變量 65
4.5.5 類對象的初始化 66
4.5.6 初始化方法的返迴值 68
第5章 基於引用計數的內存管理 69
5.1 動態內存管理 70
5.1.1 內存管理的必要性 70
5.1.2 引用計數、自動引用計數和自動垃圾迴收 70
5.2 手動引用計數內存管理 71
5.2.1 引用計數 71
5.2.2 測試引用計數的例子 73
5.2.3 釋放對象的方法 74
5.2.4 訪問方法和對象所有權 75
專欄 靜態對象 75
5.2.5 自動釋放 76
5.2.6 使用自動釋放池時需要注意的地方 77
5.2.7 臨時對象的生成 77
5.2.8 運行迴路和自動釋放池 78
5.2.9 常量對象 78
專欄 常量修飾符const 79
5.3 分數計算器的例子 80
5.3.1 分數類Faction 80
5.3.2 保存計算結果的FracRegister類 83
5.3.3 主函數和執行示例 85
5.4 ARC概要 88
5.4.1 什麼是ARC 88
5.4.2 禁止調用引用計數的相關函數 89
5.4.3 管理自動釋放池的新語法 90
5.4.4 變量的初始值 90
5.4.5 方法族 90
5.4.6 方法dealloc的定義 92
5.4.7 使用ARC的程序的編譯 93
5.4.8 ARC的基本注意事項 94
5.4.9 使用ARC重構分數計算器 94
5.5 循環引用和弱引用 95
5.5.1 循環引用 95
5.5.2 所有權和對象間的關係 96
5.5.3 弱引用 97
5.5.4 自動nil化的弱引用 98
5.5.5 對象之間引用關係的基本原則 99
5.6 ARC編程時其他一些注意事項 100
5.6.1 可以像通常的指針一樣使用的對象 100
5.6.2 setter方法的注意事項 101
5.6.3 通過函數的參數返迴結果對象 102
5.6.4 C語言數組保存Objective-C對象 103
5.6.5 ARC對結構體的一些限製 105
5.6.6 提示編譯器進行特彆處理 106
第6章 垃圾迴收 107
6.1 垃圾迴收的概要 108
6.1.1 查找不再使用的對象 108
6.1.2 編程時的注意事項 109
6.1.3 垃圾收集器 110
6.1.4 finalize方法的定義 111
6.1.5 編譯時的設定 112
6.1.6 引用計數管理方式中方法的處理 113
6.1.7 使用垃圾迴收編程小結 114
6.2 垃圾迴收的詳細功能 114
6.2.1 分代垃圾迴收 114
6.2.2 弱引用 115
6.2.3 自動nil化 115
6.2.4 通過垃圾迴收迴收動態分配的內存 116
6.2.5 _ _strong修飾符的使用方法 117
6.2.6 NSGarbageCollector類 117
6.2.7 實時API 118
6.3 內存管理方式的比較 119
6.3.1 引用計數和垃圾迴收 119
6.3.2 更改內存管理方式 120
6.3.3 各種內存管理方式的比較 120
第7章 屬性聲明 123
7.1 屬性是什麼 124
7.1.1 使用屬性編程 124
7.1.2 屬性的概念 125
專欄 內省 125
7.2 屬性的聲明和功能 126
7.2.1 顯式聲明屬性 126
7.2.2 屬性的實現 127
7.2.3 @synthesize和實例變量 129
7.2.4 通過@synthesize生成實例變量 130
7.2.5 給屬性指定選項 131
7.2.6 賦值時的選項 132
7.2.7 原子性 134
7.2.8 屬性聲明和繼承 135
7.2.9 方法族和屬性的關係 135
7.3 通過點操作符訪問屬性 136
7.3.1 點操作符的使用方法 136
7.3.2 復雜的點操作符的使用方法 137
7.3.3 何時使用點操作符 139
第8章 類NSObject和運行時係統 141
8.1 類NSObject 142
8.1.1 根類的作用 142
8.1.2 類和實例 142
8.1.3 實例對象的生成和釋放 143
8.1.4 初始化 144
8.1.5 對象的比較 144
8.1.6 對象的內容描述 145
8.2 消息發送機製 145
8.2.1 選擇器和SEL類型 145
8.2.2 消息搜索 146
8.2.3 以函數的形式來調用方法 147
專欄 函數指針 148
8.2.4 對self進行賦值 149
8.2.5 發送消息的速度 149
8.2.6 類對象和根類 152
8.2.7 Target-action paradigm 153
8.2.8 Xcode中的動作方法和Outlet的寫法 155
8.3 Objective-C和Cocoa環境 156
8.3.1 cocoa環境和Mac OS X 156
8.3.2 Cocoa Touch和iOS 156
8.3.3 框架 157
8.3.4 框架的構成和頭文件 157
8.4 全新的運行時係統 159
8.4.1 對64位的對應和現代運行時係統 159
8.4.2 數據模型 159
8.4.3 64位模型和整數類型 159
8.4.4 Core Graphics的浮點數類型 160
8.4.5 健壯實例變量 161
專欄 條件編譯 162
第9章 Foundation框架中常用的類 163
9.1 對象的可變性 164
9.1.1 可變對象和不可變對象 164
9.1.2 可變對象的生成 165
9.2 字符串類NSString 166
9.2.1 常量字符串 166
9.2.2 NSString 167
9.2.3 NSMutableString 174
9.3 NSData 176
9.3.1 NSData 176
9.3.2 NSMutableData 178
9.4 數組類 179
9.4.1 NSArray 179
9.4.2 NSMutableArray 183
9.4.3 數組對象的所有權 184
9.4.4 快速枚舉 185
9.4.5 枚舉器NSEnumerator 186
9.4.6 快速枚舉和枚舉器 187
9.4.7 集閤類 188
9.5 詞典類 189
9.5.1 NSDictionary 191
9.5.2 NSMutableDicitionary 193
9.6 包裹類 194
9.6.1 NSNumber 194
9.6.2 NSValue 196
9.6.3 類型編碼和@encode() 196
9.6.4 NSNull 197
9.7 NSURL 198
9.7.1 關於URL 198
9.7.2 NSURL的概要 199
9.7.3 使用NSURL來訪問資源 201
第10章 範疇 203
10.1 範疇 204
10.1.1 範疇 204
10.1.2 範疇和文件的組織 205
10.1.3 作為子模塊的範疇 206
10.1.4 方法的前嚮聲明 207
10.1.5 私有方法 208
10.1.6 類擴展 209
10.1.7 範疇和屬性聲明 210
10.2 給現有類追加範疇 211
10.2.1 追加新的方法 211
10.2.2 追加方法的例子 212
專欄 可變參數的方法的定義 213
10.2.3 覆蓋已有的方法 214
10.3 關聯引用 215
10.3.1 關聯引用的概念 215
10.3.2 添加和檢索關聯 215
10.3.3 對象的存儲方法 216
10.3.4 斷開關聯 217
10.3.5 利用範疇的例子 217
第11章 抽象類和類簇 221
11.1 抽象類 222
11.1.1 什麼是抽象類 222
11.1.2 抽象類的例子 223
11.2 類簇 228
11.2.1 類簇的概念 228
11.2.2 測試程序 229
11.2.3 編程中的注意事項 230
11.3 生成類簇的子類 231
11.3.1 使用範疇 231
11.3.2 基本方法的重定義 231
11.3.3 生成字符串的子類 233
第12章 協議 235
12.1 協議的概念 236
12.1.1 什麼是協議 236
12.1.2 對象的協議 236
12.2 Objective-C中協議的聲明 238
12.2.1 協議的聲明 238
12.2.2 協議的采用 239
12.2.3 協議的繼承 240
12.2.4 指定協議的類型聲明 240
12.2.5 協議的前置聲明 241
12.2.6 協議適用性檢查 241
12.2.7 必選功能和可選功能 242
12.2.8 使用協議的程序示例 242
專欄 類的多重繼承 245
12.3 非正式協議 246
12.3.1 什麼是非正式協議 246
12.3.2 非正式協議的用途 246
專欄 使用宏(macro)來區分係統版本的差異 247
第13章 對象的復製及存儲 249
13.1 對象的復製 250
13.1.1 淺復製和深復製 250
13.1.2 區域 251
13.1.3 復製方法的定義 251
13.1.4 復製方法的例子 252
13.1.5 實現可變復製 254
13.2 歸檔 255
13.2.1 對象的歸檔 255
13.2.2 Foundation框架的歸檔功能 255
13.2.3 歸檔方法的定義 256
13.2.4 歸檔的方法定義 257
13.2.5 歸檔和解檔的初始化方法 258
13.3 屬性錶 259
13.3.1 屬性錶概況 259
13.3.2 ASCII碼格式屬性錶 260
13.3.3 XML格式屬性錶 261
13.3.4 屬性錶的變換和檢查 261
第14章 塊對象 263
14.1 什麼是塊對象 264
14.1.1 C編譯器和GCD 264
14.1.2 塊對象的定義 264
14.1.3 塊對象和類型聲明 266
14.1.4 塊對象中的變量行為 267
14.1.5 排序函數和塊對象 269
14.2 塊對象的構成 271
14.2.1 塊對象的實例和生命周期 271
14.2.2 應該避免的編碼模式 273
14.2.3 塊對象的復製 273
14.2.4 指定特殊變量_ _block 274
14.3 Objective-C和塊對象 276
14.3.1 方法定義和塊對象 276
14.3.2 作為Objective-C對象的塊對象 276
14.3.3 ARC和塊對象 277
14.3.4 對象內變量的行為 277
14.3.5 集閤類中添加的方法 279
14.3.6 在窗體中使用塊對象 280
14.3.7 ARC中使用塊對象時的注意事項 281
第15章 消息發送模式 283
15.1 應用和運行迴路 284
15.1.1 運行迴路 284
15.1.2 定時器對象 285
15.1.3 消息的延遲執行 286
15.2 委托 286
15.2.1 委托的概念 286
15.2.2 Cocoa環境中的委托 287
15.2.3 委托的設置和協議 288
15.2.4 使用委托的程序 289
15.3 通知 289
15.3.1 通知和通知中心的概念 289
15.3.2 通知對象 290
15.3.3 通知中心 291
15.3.4 通知隊列 293
專欄 通知名或異常名的定義 294
15.4 反應鏈 294
15.4.1 反應鏈概述 294
15.4.2 應用中的反應鏈 295
15.5 消息轉送 296
15.5.1 消息轉送的構成 296
15.5.2 消息轉送需要的信息 296
15.5.3 消息轉送的定義 297
15.5.4 禁止使用消息 298
15.5.5 程序示例 298
15.6 撤銷構造 300
15.6.1 撤銷構造的概念 300
15.6.2 在撤銷管理器中記錄操作 301
第16章 應用的構造 303
16.1 應用束 304
16.1.1 應用束的構造 304
16.1.2 nib文件和各語言資源 305
專欄 指定語言和地區 305
16.1.3 信息文件的主要內容 306
16.1.4 通過NSBundle訪問資源 308
16.1.5 iOS中資源的訪問 310
16.1.6 通用二進製 311
16.2 加載nib文件 312
16.2.1 nib文件實例化 312
16.2.2 在Mac OS X中加載nib文件 313
16.2.3 在iOS中加載nib文件 313
16.2.4 nib文件內的包含循環 314
16.2.5 nib文件內對象的初始化 314
16.2.6 啓動應用 314
16.3 iOS的文件保存場所 316
16.3.1 主要目錄及功能 316
16.3.2 獲取目錄路徑 317
16.4 用戶默認 317
16.4.1 保存設定值 317
16.4.2 默認域 318
16.4.3 查找用戶默認的工具 319
16.4.4 NSUserDefaults概要 319
16.5 應用的本地化 321
16.5.1 消息的本地化 321
16.5.2 本地化指針 322
專欄 本地化應用名 323
16.5.3 本地化 323
專欄 消息內的語序 324
16.6 模塊的動態加載 324
16.6.1 可加載束 325
16.6.2 使用可加載束的程序 325
16.6.3 插件概述 326
專欄 沙盒(App Sandbox) 327
第17章 實例:簡單圖像視圖 329
17.1 Application框架和Interface Builder 330
17.2 程序概況 330
17.2.1 對象間的關係 330
17.2.2 通知 331
17.2.3 撤銷和重做 332
17.2.4 可加載束和本地化 332
17.2.5 用戶默認 332
17.3 編程介紹 333
17.3.1 main函數和MyViewerCtrl類 333
17.3.2 類WinCtr 336
17.3.3 類MyInspector 341
17.4 應用束的組織 345
17.4.1 創建編譯和設置文件 345
17.4.2 程序運行例子 346
17.4.3 GUI定義文件和程序 347
專欄 Objective-C調試器的功能 349
第18章 異常和錯誤 351
18.1 異常 352
18.1.1 異常處理的概念 352
18.1.2 Objective-C中的異常處理 352
18.2 異常處理機製概述 353
18.2.1 異常句柄和異常處理域 353
18.2.2 異常錶示類NSException 353
18.2.3 異常處理機製的語法 354
18.2.4 簡單的異常處理的示例程序 355
專欄 日誌輸齣函數NSLog() 356
18.3 異常的發生和傳播 357
18.3.1 異常的傳播 357
18.3.2 自己觸發異常 357
18.3.3 用 @throw語法産生異常 357
18.3.4 @catch 的特殊語法 358
18.3.5 異常傳播和 @finally 358
18.3.6 異常處理程序的注意點 359
18.4 斷言 360
18.4.1 斷言是什麼 360
18.4.2 斷言宏 361
專欄 包含可變個數的參數的宏 361
18.5 錯誤處理 362
18.5.1 錯誤處理結構的目的 362
18.5.2 錶示錯誤的類 NSError的使用方法 362
18.5.3 獲取錯誤對象的信息 364
18.5.4 生成自定義錯誤對象 364
18.6 錯誤反應鏈 366
18.6.1 錯誤反應鏈的結構 366
18.6.2 錯誤對象的更改和恢復 367
專欄 單元測試 369
第 19章 並行編程 371
19.1 多綫程 372
19.1.1 綫程的基本概念 372
19.1.2 綫程安全 372
19.1.3 注意點 373
19.1.4 使用 NSThread創建綫程 373
19.1.5 當前綫程 374
19.1.6 GUI應用和綫程 374
19.2 互斥 375
19.2.1 需要互斥的例子 375
19.2.2 鎖 376
19.2.3 死鎖 377
19.2.4 嘗試獲得鎖 378
19.2.5 條件鎖 378
19.2.6 NSRecursiveLock 379
19.2.7 @synchronized 379
19.3 操作對象和並行處理 380
19.3.1 新的並行處理程序 380
19.3.2 使用NSOperation的處理概述 381
19.3.3 NSOperation和NSOperationQueue的簡單用法 382
19.3.4 等待至聚閤任務終止 383
19.3.5 使用操作對象的簡單例子 383
19.3.6 NSInvocationOperation的使用方法 385
19.3.7 NSBlockOperation 的使用方法 385
19.3.8 NSBlockOperation中添加多個塊對象 386
19.3.9 設置任務間的依賴 386
19.3.10 任務的優先級設置 388
19.3.11 設定最大並行任務數 388
19.3.12 終止任務 389
19.3.13 設置隊列調度為中斷狀態 389
19.4 並行處理的示例程序 390
19.4.1 程序概要 390
19.4.2 類BrowsingViewerCtrl 390
19.4.3 類BrowsingWinCtrl 392
19.4.4 類DrawOperation 394
19.4.5 其他改變 396
19.5 使用連接的通信 397
19.5.1 連接 398
19.5.2 代理 398
19.5.3 方法的指針參數 399
19.5.4 對象的副本傳遞 400
19.5.5 異步通信 401
19.5.6 設置協議 401
19.5.7 運行迴路的開始 402
19.5.8 收發消息時的處理 402
19.5.9 綫程間連接 404
19.5.10 進程間連接 406
19.5.11 進程間連接的例子 407
第20章 鍵值編碼 411
20.1 鍵值編碼概況 412
20.1.1 什麼是鍵值編碼 412
20.1.2 鍵值編碼的基本處理 412
20.2 訪問屬性 414
20.2.1 鍵值編碼的方法的行為 414
20.2.2 屬性值的自動轉換 415
20.2.3 字典對象和鍵值編碼 416
20.2.4 根據鍵路徑進行訪問 416
20.2.5 一對一關係和一對多關係 417
20.2.6 數組對象和鍵值編碼 419
20.3 一對多關係的訪問 420
20.3.1 帶索引的訪問器模式 420
20.3.2 一對多關係的可變訪問 421
20.4 KVC標準 422
20.4.1 驗證屬性值 422
20.4.2 鍵值編碼的準則 423
20.5 鍵值觀察 424
20.5.1 鍵值觀察的基礎 424
20.5.2 示例程序 426
20.5.3 一對多關係的屬性監視 429
20.5.4 依賴鍵的登記 429
20.6 Cocoa綁定概述 430
20.6.1 目標-行為-模式的弱點 430
20.6.2 什麼是Cocoa綁定 430
20.6.3 Cocoa綁定所需的方法 431
20.6.4 例題:繪製二次函數圖的軟件 432
20.6.5 自定義視圖的方法定義 434
· · · · · · (
收起)