性能對用戶體驗有著至關重要的影響。本書將介紹對用戶體驗產(chǎn)生負面影響的各個方面, 并概述如何優(yōu)化iOS應用的性能。全書共5個部分, 主要從性能的衡量標準、對應用至關重要的核心優(yōu)化點、iOS應用開發(fā)特有的性能優(yōu)化技術以及性能的非代碼方面, 講解了應用性能的優(yōu)化問題。本書的主要目的是展示如何從工程學的角度編寫優(yōu)質(zhì)代碼。
Gaurav Vaish,就職于雅虎公司的移動和新興產(chǎn)品團隊,為每月有數(shù)億人使用的移動應用創(chuàng)建優(yōu)雅的可重用方案。他曾是IIT全球指導計劃的成員,還在印度班加羅爾創(chuàng)立了InColeg Learning及Edujini Labs有限公司。
梁士興,畢業(yè)于北京航空航天大學,現(xiàn)任職美團-大眾點評iOS高級技術專家。有多年的一線iOS開發(fā)經(jīng)驗,對于iOS應用性能有深入研究和獨到見解。對iOS前沿技術、移動應用架構(gòu)模式非常感興趣。
郝田田,畢業(yè)于西安電子科技大學,現(xiàn)任職美團-大眾點評iOS研發(fā)工程師,具有豐富的iOS軟件開發(fā)經(jīng)驗,長期關注iOS領域前沿技術,曾參與數(shù)本iOS技術類書籍翻譯工作。
陳作君,畢業(yè)于北京理工大學,現(xiàn)任職滴滴出行iOS研發(fā)工程師,多年大型移動端應用開發(fā)經(jīng)驗,熱衷于開源項目建設,是一名技術書籍翻譯的愛好者。
譯者序 xv
前言 xvii
第一部分 開始
第1 章 移動應用的性能 3
1.1 定義性能 3
1.2 性能指標 4
1.2.1 內(nèi)存 4
1.2.2 電量消耗 4
1.2.3 初始化時間 4
1.2.4 執(zhí)行速度 5
1.2.5 響應速度 5
1.2.6 本地存儲 5
1.2.7 互操作性 6
1.2.8 網(wǎng)絡環(huán)境 7
1.2.9 帶寬 7
1.2.10 數(shù)據(jù)刷新 8
1.2.11 多用戶支持 8
1.2.12 單點登錄 9
1.2.13 安全 9
1.2.14 崩潰 10
1.3 應用性能分析 10
1.3.1 采樣 10
1.3.2 埋點 10
1.4 測量 11
1.4.1 設置工程與代碼 11
1.4.2 設置崩潰報告 12
1.4.3 對應用埋點 13
1.4.4 日志 17
1.5 小結(jié) 19
第二部分 核心優(yōu)化
第2 章 內(nèi)存管理 23
2.1 內(nèi)存消耗 23
2.1.1 棧大小 24
2.1.2 堆大小 25
2.2 內(nèi)存管理模型 27
2.3 自動釋放對象 28
2.4 自動釋放池塊 30
2.5 自動引用計數(shù) 32
2.6 引用類型 35
2.6.1 變量限定符 36
2.6.2 屬性限定符 37
2.7 實踐環(huán)節(jié) 38
2.7.1 照片模型 38
2.7.2 更新故事板 38
2.7.3 方法實現(xiàn) 39
2.7.4 輸出分析 41
2.8 僵尸對象 42
2.9 內(nèi)存管理規(guī)則 43
2.10 循環(huán)引用 43
2.10.1 避免循環(huán)引用的規(guī)則 45
2.10.2 循環(huán)引用的常見場景 46
2.10.3 觀察者 56
2.10.4 返回錯誤 59
2.11 弱類型:id 59
2.12 對象壽命與泄漏 61
2.13 單例 62
2.14 找到神秘的持有者 64
2.15 最佳實踐 65
2.16 生產(chǎn)環(huán)境的內(nèi)存使用情況 66
2.17 小結(jié) 67
第3 章 能耗 68
3.1 CPU 68
3.2 網(wǎng)絡 70
3.3 定位管理器和GPS 73
3.3.1 最佳的初始化 74
3.3.2 關閉無關緊要的特性 75
3.3.3 只在必要時使用網(wǎng)絡 76
3.3.4 后臺定位服務 77
3.3.5 NSTimer、NSThread 和定位服務 77
3.3.6 在應用關閉后重啟 78
3.4 屏幕 78
3.4.1 動畫 78
3.4.2 視頻播放 78
3.4.3 多屏幕 79
3.5 其他硬件 83
3.6 電池電量與代碼感知 83
3.7 分析電量使用 85
3.8 最佳實踐 86
3.9 小結(jié) 88
第4 章 并發(fā)編程 89
4.1 線程 89
4.2 線程開銷 90
4.2.1 內(nèi)核數(shù)據(jù)結(jié)構(gòu) 90
4.2.2 ?臻g 90
4.2.3 創(chuàng)建耗時 90
4.3 GCD 91
4.4 操作與隊列 92
4.5 線程安全的代碼 93
4.5.1 原子屬性 93
4.5.2 同步塊 94
4.5.3 鎖 96
4.5.4 將讀寫鎖應用于并發(fā)讀寫 100
4.5.5 使用不可變實體 102
4.5.6 使用集中的狀態(tài)更新服務 106
4.5.7 狀態(tài)觀察者與通知 110
4.5.8 異步優(yōu)于同步 114
4.6 小結(jié) 116
第三部分 iOS 性能
第5 章 應用的生命周期 119
5.1 應用委托 119
5.2 應用啟動 121
5.2.1 首次啟動 123
5.2.2 冷啟動 129
5.2.3 熱啟動 135
5.2.4 升級后啟動 137
5.3 推送通知 138
5.3.1 遠程通知 138
5.3.2 本地通知 141
5.4 后臺拉取 142
5.5 小結(jié) 144
第6 章 用戶界面 145
6.1 視圖控制器 146
6.1.1 視圖加載 149
6.1.2 視圖層級 150
6.1.3 視圖可見性 152
6.2 視圖 154
6.2.1 UILabel 155
6.2.2 UIButton 156
6.2.3 UIImageView 157
6.2.4 UITableView 158
6.2.5 UIWebView 161
6.2.6 自定義視圖 164
6.3 自動布局 170
6.4 尺寸類別 171
6.5 iOS 8 中新的交互特性 175
6.5.1 交互式通知 175
6.5.2 應用擴展 176
6.6 小結(jié) 179
第7 章 網(wǎng)絡 180
7.1 指標和測量 180
7.1.1 DNS 查找時間 181
7.1.2 SSL 握手時間 182
7.1.3 網(wǎng)絡類型 183
7.1.4 延遲 188
7.1.5 網(wǎng)絡API 190
7.2 應用部署 190
7.2.1 服務器 191
7.2.2 請求 191
7.2.3 數(shù)據(jù)格式 192
7.3 工具 193
7.3.1 網(wǎng)絡鏈接調(diào)節(jié)器 193
7.3.2 AT & T 應用資源優(yōu)化器 194
7.3.3 Charles 196
7.4 小結(jié) 199
第8 章 數(shù)據(jù)共享 200
8.1 深層鏈接 200
8.2 剪貼板 205
8.3 共享內(nèi)容 208
8.3.1 文檔交互 209
8.3.2 活動 215
8.4 iOS 8 擴展 217
8.4.1 配置操作擴展和共享擴展 219
8.4.2 操作擴展 220
8.4.3 共享擴展 221
8.4. 4 文檔提供者擴展 223
8.4.5 應用群組 228
8.5 小結(jié) 230
第9 章 安全 231
9.1 應用訪問 232
9.1.1 匿名訪問 232
9.1.2 認證訪問 234
9.2 網(wǎng)絡安全 237
9.2.1 使用HTTPS 237
9.2.2 使用證書鎖定 238
9.3 本地存儲 242
9.4 數(shù)據(jù)共享 248
9.5 安全和應用性能 248
9.6 清單 248
9.7 小結(jié) 250
第四部分 代碼之外
第10 章 測試及發(fā)布 253
10.1 測試類型 253
10.2 定義 254
10.3 單元測試 255
10.3.1 設置 255
10.3.2 編寫單元測試 256
10.3.3 代碼覆蓋率 258
10.3.4 異步操作 262
10.3.5 Xcode 6 福利:性能單元測試 263
10.3.6 模擬依賴 265
10.3.7 其他框架 268
10.4 功能測試 268
10.4.1 設置 269
10.4.2 編寫功能測試 271
10.4.3 工程結(jié)構(gòu) 273
10.5 隔離依賴 274
10.6 測試及組件設計 275
10.7 持續(xù)集成與自動化 277
10.8 最佳實踐 278
10.9 小結(jié) 282
第11 章 工具 283
11.1 Accessibility Inspector 283
11.1.1 Xcode Accessibility Inspector 284
11.1.2 iOS Accessibility Inspector 285
11.2 Instruments 288
11.2.1 使用Instruments 289
11.2.2 活動監(jiān)視器 291
11.2.3 內(nèi)存分配 292
11.2.4 內(nèi)存泄漏 295
11.2.5 網(wǎng)絡 296
11.2.6 時間分析器 297
11.3 Xcode 視圖調(diào)試器 298
11.4 PonyDebugger 300
11.5 Charles 304
11.6 小結(jié) 309
第12 章 埋點與分析 310
12.1 詞匯 310
12.2 埋點 312
12.2.1 規(guī)劃 312
12.2.2 實現(xiàn) 314
12.2.3 部署 316
12.3 分析 317
12.4 真實用戶監(jiān)控 317
12.4.1 分析與真實用戶監(jiān)控對比 317
12.4.2 使用真實用戶監(jiān)控 318
12.5 小結(jié) 318
第五部分 iOS 9
第13 章 iOS 9 321
13.1 應用的生命周期 321
13.1.1 通用鏈接 322
13.1.2 搜索 324
13.1.3 搜索最佳實踐 328
13.2 用戶界面 329
13.2.1 UIKit 框架 330
13.2.2 Safari 服務框架 332
13.3 擴展 335
13.3.1 內(nèi)容攔截擴展 336
13.3.2 Spotlight 索引擴展 338
13.4 應用瘦身 339
13.4.1 分割 339
13.4.2 按需加載資源 340
13.4.3 bitcode 343
13.5 小結(jié) 344
第14 章 iOS 10 345
14.1 Siri 擴展 346
14.2 改進的通知 348
14.2.1 申請權限 348
14.2.2 觸發(fā)器 348
14.2.3 為通知添加交互 349
14.2.4 完全自定義展示通知 350
14.2.5 通知服務擴展 352
14.3 iMessage 擴展 354
14.4 VoIP 支持 357
作者介紹 359
封面介紹 359