第一部分 全新功能
第1章 全新的係統 2
1.1 新的UI 2
1.2 UIKit Dynamics和Motion Effects 3
1.3 自定義過渡效果 4
1.4 新的多任務模式 4
1.5 Text Kit 5
1.6 動態字體 5
1.7 MapKit集成 5
1.8 SpriteKit 5
1.9 LLVM 5 5
1.10 Xcode 5 7
1.10.1 nib文件格式的變化 7
1.10.2 源代碼控製集成 7
1.10.3 自動配置 7
1.10.4 對調試導航麵闆的改進 8
1.10.5 文檔瀏覽器 8
1.10.6 Asset Catalog 9
1.10.7 測試導航麵闆 9
1.10.8 持續集成 10
1.10.9 Auto Layout改進 10
1.10.10 iOS模擬器 10
1.11 其他 10
1.12 小結 11
1.13 擴展閱讀 11
第2章 世界是平的:新的UI範式 12
2.1 清晰、依從和層次 12
2.2 動畫、動畫、動畫 12
2.2.1 UIKit Dynamics 13
2.2.2 UIMotionEffect 13
2.3 著色 14
2.4 用半透明實現層次和上下文 14
2.5 動態字體 15
2.6 自定義過渡效果 16
2.7 把應用過渡(遷移)到iOS 7 17
2.7.1 UIKit變化 17
2.7.2 自定義設計 17
2.7.3 支持iOS 6 17
2.8 小結 20
2.9 擴展閱讀 20
第二部分 充分利用日常工具
第3章 你可能不知道的 22
3.1 命名最佳實踐 22
3.1.1 自動變量 22
3.1.2 方法 22
3.2 屬性和實例變量最佳實踐 23
3.3 分類 24
3.4 關聯引用 26
3.5 弱引用容器 27
3.6 NSCache 28
3.7 NSURLComponents 28
3.8 CFStringTransform 29
3.9 instancetype 30
3.10 Base64和百分號編碼 31
3.11 -[NSArray firstObject] 31
3.12 小結 31
3.13 擴展閱讀 32
第4章 故事闆及自定義切換效果 33
4.1 初識故事闆 33
4.1.1 實例化故事闆 34
4.1.2 加載故事闆中的視圖控製器 34
4.1.3 聯綫 34
4.1.4 使用故事闆來實現錶視圖 36
4.2 自定義切換效果 37
4.2.1 優點 39
4.2.2 白璧微瑕——閤並衝突 39
4.3 小結 39
4.4 擴展閱讀 39
第5章 掌握集閤視圖 41
5.1 集閤視圖 41
5.1.1 類與協議 41
5.1.2 示例 42
5.2 用集閤視圖自定義布局實現高級定製 49
5.2.1 石工布局 50
5.2.2 封麵瀏覽布局 55
5.3 小結 56
5.4 擴展閱讀 56
第6章 使用自動布局 58
6.1 Xcode 4的自動布局 58
6.2 瞭解自動布局 59
6.3 Xcode 5中自動布局的新特性 59
6.3.1 在Xcode 5中使用自動布局 61
6.3.2 固有尺寸 62
6.3.3 固有尺寸和本地化 63
6.3.4 設計時和運行時布局 63
6.3.5 自動更新邊框 64
6.3.6 頂部和底部布局引導 65
6.3.7 輔助編輯器中的布局預覽 65
6.3.8 在設計時調試自動布局 65
6.3.9 在自動布局中使用滾動視圖 66
6.3.10 使用自動布局和邊框 66
6.3.11 可視格式化語言 66
6.3.12 可視格式化語言的缺點 67
6.3.13 調試布局錯誤 68
6.4 小結 69
6.5 擴展閱讀 69
第7章 更完善的自定義繪圖 71
7.1 iOS的不同繪圖係統 71
7.2 UIKit和視圖繪圖周期 72
7.3 視圖繪製與視圖布局 73
7.4 自定義視圖繪製 74
7.4.1 通過UIKit繪圖 74
7.4.2 路徑 75
7.4.3 理解坐標係 77
7.4.4 重新調整大小以及內容模式 79
7.4.5 變形 80
7.4.6 通過Core Graphics進行繪製 82
7.4.7 混用UIKit與Core Graphics 85
7.4.8 管理圖形上下文 85
7.5 優化UIView繪製 87
7.5.1 避免繪圖 87
7.5.2 緩存與後颱繪製 88
7.5.3 自定義繪圖與預渲染 88
7.5.4 像素對齊與模糊文本 89
7.5.5 透明、不透明與隱藏 90
7.6 小結 90
7.7 擴展閱讀 91
第8章 Core Animation 92
8.1 視圖動畫 92
8.2 管理用戶交互 94
8.3 圖層繪製 94
8.3.1 直接設置內容 96
8.3.2 實現display方法 97
8.3.3 自定義繪圖 97
8.3.4 在自己的上下文中繪圖 99
8.4 移動對象 99
8.4.1 隱式動畫 100
8.4.2 顯式動畫 101
8.4.3 模型與錶示 101
8.4.4 關於定時 103
8.5 三維動畫 105
8.6 美化圖層 108
8.7 用動作實現自動動畫 108
8.8 為自定義屬性添加動畫 110
8.9 Core Animation與綫程 111
8.10 小結 111
8.11 擴展閱讀 111
第9章 多任務 113
9.1 多任務和運行循環簡介 113
9.2 以操作為中心的多任務開發 114
9.3 用GCD實現多任務 118
9.3.1 分派隊列簡介 119
9.3.2 用分派屏障創建同步點 120
9.3.3 分派組 121
9.4 小結 121
9.5 擴展閱讀 121
第三部分 選擇工具
第10章 創建(Core)Foundation
框架 124
10.1 Core Foundation類型 124
10.2 命名和內存管理 125
10.3 分配器 126
10.4 內省 126
10.5 字符串和數據 127
10.5.1 常量字符串 127
10.5.2 創建字符串 128
10.5.3 轉換為C字符串 129
10.5.4 其他字符串操作符 131
10.5.5 字符串的支持存儲 131
10.5.6 CFData 132
10.6 容器類型 132
10.6.1 CFArray 133
10.6.2 CFDictionary 133
10.6.3 CFSet和CFBag 134
10.6.4 其他容器類型 134
10.6.5 迴調函數 134
10.7 自由橋接 136
10.8 小結 139
10.9 擴展閱讀 139
第11章 幕後製作:後颱處理 140
11.1 後颱運行最佳實踐:能力越大責任
越大 140
11.2 iOS 7中後颱運行的重要變化 142
11.3 用NSURLSession訪問網絡 142
11.3.1 會話配置 143
11.3.2 任務 143
11.3.3 後颱傳輸 144
11.4 周期性拉取和自適應多任務 146
11.5 後颱喚醒 146
11.6 狀態恢復係統 147
11.6.1 測試狀態恢復係統 147
11.6.2 選擇性加入 148
11.6.3 應用啓動過程的變化 149
11.6.4 狀態恢復標識符 149
11.6.5 狀態編碼器與狀態解碼器 149
11.6.6 錶視圖和集閤視圖 153
11.7 小結 154
11.8 擴展閱讀 154
第12章 使用REST服務 156
12.1 REST簡介 157
12.2 選擇數據交換格式 157
12.2.1 在iOS中解析XML 157
12.2.2 在iOS中解析JSON 158
12.2.3 XML與JSON 159
12.2.4 模型版本化 160
12.3 假想的Web服務 160
12.4 重要提醒 161
12.5 RESTfulEngine架構(iHotelApp
示例代碼) 161
12.5.1 NSURLConnection與第三
方框架 161
12.5.2 創建RESTfulEngine 162
12.5.3 使用訪問令牌對API調用
進行認證 165
12.5.4 在RESTfulEngine.m中覆
蓋相關方法以添加自定義
認證頭部 165
12.5.5 取消請求 166
12.5.6 請求響應 166
12.5.7 對JSON數據進行鍵值編碼 167
12.5.8 列錶頁麵的JSON對象與詳細頁麵的JSON對象 169
12.5.9 嵌套JSON對象 169
12.5.10 少即是多 171
12.5.11 錯誤處理 171
12.5.12 本地化 173
12.5.13 使用分類處理其他格式 173
12.5.14 在iOS中提升性能的小技
巧 174
12.6 緩存 174
12.7 需要離綫支持的原因 174
12.8 緩存策略 175
12.8.1 存儲緩存 175
12.8.2 緩存版本和失效 178
12.9 數據模型緩存 178
12.10 緩存版本控製 182
12.11 創建內存緩存 183
12.11.1 為AppCache設計內存
緩存 184
12.11.2 處理內存警告 185
12.11.3 處理結束和進入後颱通
知 186
12.12 創建URL緩存 186
12.12.1 過期模型 187
12.12.2 驗證模型 187
12.12.3 示例 187
12.12.4 用URL緩存來緩存圖片 188
12.13 小結 188
12.14 擴展閱讀 188
第13章 充分利用藍牙設備 190
13.1 藍牙曆史 190
13.2 為什麼選擇低功耗藍牙 191
13.3 藍牙SDK 191
13.3.1 服務器 191
13.3.2 客戶端 191
13.4 類和協議 191
13.5 使用藍牙設備 192
13.5.1 通過掃描尋找服務 192
13.5.2 連接設備 194
13.5.3 直接獲取外圍設備 194
13.5.4 發現服務 194
13.5.5 發現特性 195
13.6 創建自己的外圍設備 197
13.6.1 廣播服務 197
13.6.2 常見場景 200
13.7 在後颱運行 200
13.7.1 後颱模式 200
13.7.2 電量考慮 200
13.7.3 狀態保存和恢復 200
13.8 小結 201
13.9 擴展閱讀 201
第14章 通過安全服務鞏固係統安全 203
14.1 理解iOS沙盒 203
14.2 保證網絡通信的安全 204
14.2.1 證書工作原理 205
14.2.2 檢驗證書的有效性 207
14.2.3 判斷證書的可信度 210
14.3 使用文件保護 211
14.4 使用鑰匙串 213
14.5 使用加密 216
14.5.1 AES概要 217
14.5.2 使用PBKDF2將密碼轉換
成密鑰 217
14.5.3 AES模式和填充 219
14.5.4 初始化嚮量 220
14.5.5 使用HMAC進行認證 221
14.5.6 錯誤的密碼 222
14.5.7 組閤使用加密和壓縮 222
14.6 小結 222
14.7 擴展閱讀 222
第15章 在多個蘋果平颱和設備及64
位體係結構上運行應用 224
15.1 開發多平颱應用 225
15.1.1 可配置的目標設置:Base
SDK和Deployment Target 225
15.1.2 支持多個SDK時的注意事項:框架、類和方法 225
15.1.3 檢查框架、類和方法的可
用性 227
15.2 檢測設備的功能 228
15.2.1 檢測設備及判斷功能 228
15.2.2 檢測硬件和傳感器 229
15.3 應用內發送Email和短信 233
15.4 支持新的4英寸設備族係 233
15.4.1 Cocoa自動布局 235
15.4.2 代碼中固化屏幕尺寸 235
15.4.3 iPhone 5s和新的64位指令集 235
15.5 嚮iOS 7遷移 236
15.5.1 自動布局 236
15.5.2 支持iOS 6 236
15.5.3 應用圖標 237
15.5.4 無邊界按鈕 237
15.5.5 著色 237
15.5.6 圖片更新 237
15.6 嚮64位體係結構遷移 238
15.6.1 數據溢齣 238
15.6.2 序列化數據 239
15.6.3 針對64位體係結構的條件
編譯 239
15.7 UIRequiredDeviceCapabilities 239
15.8 小結 240
15.9 擴展閱讀 240
第16章 國際化和本地化 242
16.1 什麼是本地化 242
16.2 本地化字符串 243
16.3 對未本地化的字符串進行審查 244
16.4 格式化數字和日期 245
16.5 nib文件和Base Internationalization 248
16.6 本地化復雜字符串 248
16.7 小結 250
16.8 擴展閱讀 251
第17章 調試 252
17.1 LLDB 252
17.2 使用LLDB進行調試 252
17.2.1 dSYM文件 253
17.2.2 符號化 254
17.3 斷點 255
17.4 觀察點 258
17.5 LLDB控製颱 259
17.6 NSZombieEnabled標誌 262
17.7 不同的崩潰類型 263
17.7.1 EXC_BAD_ACCESS 263
17.7.2 SIGSEGV 263
17.7.3 SIGBUS 264
17.7.4 SIGTRAP 264
17.7.5 EXC_ARITHMETIC 264
17.7.6 SIGILL 264
17.7.7 SIGABRT 264
17.7.8 看門狗超時 265
17.7.9 自定義錯誤信號處理程序 265
17.8 斷言 265
17.9 異常 267
17.10 收集崩潰報告 268
17.11 第三方崩潰報告服務 269
17.12 小結 270
17.13 擴展閱讀 270
第18章 性能調優 272
18.1 性能思維模式 272
18.1.1 指導方針一:産品是為瞭
取悅用戶纔存在的 272
18.1.2 指導方針二:設備是為瞭
方便用戶而存在的 272
18.1.3 指導方針三:做到極緻 272
18.1.4 指導方針四:用戶的感知
纔是實際的 273
18.1.5 指導方針五:關注能帶來
大收益的方麵 273
18.2 歡迎走入Instruments的世界 273
18.3 查找內存問題 275
18.4 查找CPU問題 279
18.4.1 Accelerate框架 282
18.4.2 GLKit 283
18.4.3 編譯器優化 283
18.4.4 鏈接器優化 284
18.5 繪圖性能 284
18.6 優化磁盤訪問和網絡訪問 286
18.7 小結 286
18.8 擴展閱讀 286
第四部分 超越極限
第19章 近乎物理效果:UIKit動力學 290
19.1 動畫類、行為和動力項 290
19.2 UIKit“物理” 291
19.3 內置行為 292
19.3.1 迅速移動 292
19.3.2 附著 292
19.3.3 推力 293
19.3.4 重力 294
19.3.5 碰撞 294
19.3.6 動力項 295
19.4 行為層次結構 295
19.5 自定義操作 295
19.6 實戰:一個“撕開”視圖 296
19.6.1 拖拽視圖 296
19.6.2 撕開該視圖 297
19.6.3 添加額外效果 300
19.7 多個動力學動畫類 301
19.8 與UICollectionView交互 302
19.9 小結 305
19.10 擴展閱讀 305
第20章 魔幻的自定義過渡 306
20.1 iOS 7中的自定義過渡 306
20.2 過渡協調器 307
20.3 集閤視圖和布局過渡 308
20.4 使用故事闆和自定義聯綫的自定義
視圖控製器過渡 308
20.5 自定義視圖控製器過渡:iOS 7風格 308
20.6 使用iOS 7 SDK的交互式自定義
過渡 310
20.7 小結 312
20.8 擴展閱讀 313
第21章 精妙的文本布局 314
21.1 理解富文本 314
21.1.1 字符與字形 314
21.1.2 理解字體 316
21.1.3 段落樣式 316
21.2 屬性化字符串 317
21.2.1 用字體描述符選擇字體 318
21.2.2 設置段落樣式 319
21.2.3 HTML 319
21.2.4 簡化屬性化字符串的使用 320
21.3 動態字體 321
21.4 Text Kit 322
21.4.1 Text Kit的組件 323
21.4.2 多容器布局 324
21.4.3 排除路徑 325
21.4.4 繼承文本容器 326
21.4.5 繼承文本存儲 327
21.4.6 繼承布局管理器 331
21.4.7 針對字形的布局 334
21.5 Core Text 337
21.5.1 用CTFramesetter進行
簡單的布局 337
21.5.2 為非連續路徑創建框架 338
21.5.3 排版器、文本行、連續文本和字形 340
21.6 小結 340
21.7 擴展閱讀 341
第22章 Cocoa的大招:鍵值編碼
和觀察 342
22.1 鍵值編碼 342
22.1.1 用KVC賦值 344
22.1.2 用鍵路徑遍曆屬性 345
22.1.3 KVC和容器類 345
22.1.4 KVC和字典 347
22.1.5 KVC和非對象 347
22.1.6 用KVC實現高階消息傳遞 347
22.1.7 容器操作符 347
22.2 鍵值觀察 348
22.2.1 KVO和容器類 350
22.2.2 KVO是如何實現的 351
22.3 KVO的權衡 351
22.4 小結 352
22.5 擴展閱讀 353
第23章 超越隊列:GCD高級功能 354
23.1 信號量 354
23.2 分派源 356
23.3 定時器源 358
23.4 單次分派 358
23.5 隊列關聯數據 359
23.6 分派數據和分派I/O 362
23.7 小結 367
23.8 擴展閱讀 367
第24章 深度解析Objective-C 368
24.1 理解類和對象 368
24.2 使用方法和屬性 370
24.3 使用方法簽名和調用 372
24.4 消息傳遞如何工作 378
24.4.1 動態實現 378
24.4.2 快速轉發 380
24.4.3 普通轉發 383
24.4.4 轉發失敗 384
24.4.5 各種版本的objc_msgSend 384
24.5 方法混寫 385
24.6 ISA混寫 387
24.7 方法混寫與ISA混寫 388
24.8 小結 389
24.9 擴展閱讀 389
· · · · · · (
收起)