性能對用戶體驗有著至關(guān)重要的影響。本書將介紹對用戶體驗產(chǎn)生負面影響的各個方面, 并概述如何優(yōu)化iOS應(yīng)用的性能。全書共5個部分, 主要從性能的衡量標準、對應(yīng)用至關(guān)重要的核心優(yōu)化點、iOS應(yīng)用開發(fā)特有的性能優(yōu)化技術(shù)以及性能的非代碼方面, 講解了應(yīng)用性能的優(yōu)化問題。本書的主要目的是展示如何從工程學(xué)的角度編寫優(yōu)質(zhì)代碼。
本書為有經(jīng)驗的iOS開發(fā)者提供構(gòu)建優(yōu)異應(yīng)用移動性能所需的開發(fā)建議和實踐,幫助讀者解決常見性能問題。
作者Gaurav Vaish從工程角度演示了編寫優(yōu)質(zhì)代碼的方法,詳盡介紹如何設(shè)計和優(yōu)化iOS應(yīng)用,以便在網(wǎng)絡(luò)較差、內(nèi)存較低的情況下提供流暢的用戶體驗。書中還提供了可以反復(fù)使用的Objective-C代碼,以及一些能夠從眾多應(yīng)用中脫穎而出的高性能原生iOS應(yīng)用。
·概述跟蹤應(yīng)用性能時需要衡量的參數(shù)以及如何衡量性能。
·通過zui小化內(nèi)存和功耗以及并發(fā)編程來編寫高效應(yīng)用,并探索一些相關(guān)選項。
·優(yōu)化應(yīng)用的生命周期和UI,以及網(wǎng)絡(luò)、數(shù)據(jù)共享和安全功能。
·了解應(yīng)用的測試、調(diào)試和分析工具,并監(jiān)控應(yīng)用
·從真實用戶處收集數(shù)據(jù)來分析應(yīng)用的使用情況,找出瓶頸,并進行修復(fù)
Gaurav Vaish,就職于雅虎公司的移動和新興產(chǎn)品團隊,為每月有數(shù)億人使用的移動應(yīng)用創(chuàng)建優(yōu)雅的可重用方案。他曾是IIT全球指導(dǎo)計劃的成員,還在印度班加羅爾創(chuàng)立了InColeg Learning及Edujini Labs有限公司。
梁士興,畢業(yè)于北京航空航天大學(xué),現(xiàn)任職美團-大眾點評iOS高級技術(shù)專家。有多年的一線iOS開發(fā)經(jīng)驗,對于iOS應(yīng)用性能有深入研究和獨到見解。對iOS前沿技術(shù)、移動應(yīng)用架構(gòu)模式非常感興趣。
郝田田,畢業(yè)于西安電子科技大學(xué),現(xiàn)任職美團-大眾點評iOS研發(fā)工程師,具有豐富的iOS軟件開發(fā)經(jīng)驗,長期關(guān)注iOS領(lǐng)域前沿技術(shù),曾參與數(shù)本iOS技術(shù)類書籍翻譯工作。
陳作君,畢業(yè)于北京理工大學(xué),現(xiàn)任職滴滴出行iOS研發(fā)工程師,多年大型移動端應(yīng)用開發(fā)經(jīng)驗,熱衷于開源項目建設(shè),是一名技術(shù)書籍翻譯的愛好者。
譯者序 xv
前言 xvii
第一部分 開始
第1 章 移動應(yīng)用的性能 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 響應(yīng)速度 5
1.2.6 本地存儲 5
1.2.7 互操作性 6
1.2.8 網(wǎng)絡(luò)環(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 應(yīng)用性能分析 10
1.3.1 采樣 10
1.3.2 埋點 10
1.4 測量 11
1.4.1 設(shè)置工程與代碼 11
1.4.2 設(shè)置崩潰報告 12
1.4.3 對應(yīng)用埋點 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)絡(luò) 70
3.3 定位管理器和GPS 73
3.3.1 最佳的初始化 74
3.3.2 關(guān)閉無關(guān)緊要的特性 75
3.3.3 只在必要時使用網(wǎng)絡(luò) 76
3.3.4 后臺定位服務(wù) 77
3.3.5 NSTimer、NSThread 和定位服務(wù) 77
3.3.6 在應(yīng)用關(guān)閉后重啟 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 將讀寫鎖應(yīng)用于并發(fā)讀寫 100
4.5.5 使用不可變實體 102
4.5.6 使用集中的狀態(tài)更新服務(wù) 106
4.5.7 狀態(tài)觀察者與通知 110
4.5.8 異步優(yōu)于同步 114
4.6 小結(jié) 116
第三部分 iOS 性能
第5 章 應(yīng)用的生命周期 119
5.1 應(yīng)用委托 119
5.2 應(yīng)用啟動 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 應(yīng)用擴展 176
6.6 小結(jié) 179
第7 章 網(wǎng)絡(luò) 180
7.1 指標和測量 180
7.1.1 DNS 查找時間 181
7.1.2 SSL 握手時間 182
7.1.3 網(wǎng)絡(luò)類型 183
7.1.4 延遲 188
7.1.5 網(wǎng)絡(luò)API 190
7.2 應(yīng)用部署 190
7.2.1 服務(wù)器 191
7.2.2 請求 191
7.2.3 數(shù)據(jù)格式 192
7.3 工具 193
7.3.1 網(wǎng)絡(luò)鏈接調(diào)節(jié)器 193
7.3.2 AT & T 應(yīng)用資源優(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 應(yīng)用群組 228
8.5 小結(jié) 230
第9 章 安全 231
9.1 應(yīng)用訪問 232
9.1.1 匿名訪問 232
9.1.2 認證訪問 234
9.2 網(wǎng)絡(luò)安全 237
9.2.1 使用HTTPS 237
9.2.2 使用證書鎖定 238
9.3 本地存儲 242
9.4 數(shù)據(jù)共享 248
9.5 安全和應(yīng)用性能 248
9.6 清單 248
9.7 小結(jié) 250
第四部分 代碼之外
第10 章 測試及發(fā)布 253
10.1 測試類型 253
10.2 定義 254
10.3 單元測試 255
10.3.1 設(shè)置 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 設(shè)置 269
10.4.2 編寫功能測試 271
10.4.3 工程結(jié)構(gòu) 273
10.5 隔離依賴 274
10.6 測試及組件設(shè)計 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)絡(luò) 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 應(yīng)用的生命周期 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 服務(wù)框架 332
13.3 擴展 335
13.3.1 內(nèi)容攔截擴展 336
13.3.2 Spotlight 索引擴展 338
13.4 應(yīng)用瘦身 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 申請權(quán)限 348
14.2.2 觸發(fā)器 348
14.2.3 為通知添加交互 349
14.2.4 完全自定義展示通知 350
14.2.5 通知服務(wù)擴展 352
14.3 iMessage 擴展 354
14.4 VoIP 支持 357
作者介紹 359
封面介紹 359