iOS和macOS性能最佳化:Cocoa,Cocoa Touch,Objective-C和Swift
书籍信息
着 者:(德)Marcel Weiher(马塞尔·韦伊尔)
作 译 者:李俊阳等
出版时间:2018-06 千 字 数:442
版 次:01-01 页 数:368
开 本:16开
装 帧:
I S B N :9787121338144
换 版:
所属分类:科技 >> 计算机 >> 作业系统
内容简介
随着套用功能的日益增加,性能问题也逐渐浮出水面,进入我们的视野之中。本书作者Marcel Weiher在性能调优领域有着丰富的经验,在他的带领下,你将会了解如何提升CPU、记忆体、I/O、图像、Swift等方面的性能,如何在开发过程中定位到性能的瓶颈和问题,他同时还介绍了性能最佳化的编程技巧和最佳实践,从而帮助你写出更高效、更快速的代码。此外,你还将学习到定位性能问题的工具使用方法以及最佳实践,并跟随示例来学习性能最佳化。本书适合寻求进阶及所有对性能最佳化感兴趣的iOS 开发人员阅读。
目录
目录
1 CPU:原理 ...................................................................................................................... 1
一个简单的例子 ......................................................................................................................... 2
(微)基準的危险 ............................................................................................................. 3
更多整数求和的方式 ....................................................................................................... 4
Swift.................................................................................................................................. 5
其他语言 ........................................................................................................................... 7
混编的力量 ................................................................................................................................ 9
趋势 .......................................................................................................................................... 10
操作成本 .................................................................................................................................. 12
複杂度计算 ............................................................................................................................... 14
总结 .......................................................................................................................................... 16
2 CPU:测量和工具 ......................................................................................................... 17
命令行工具 ............................................................................................................................... 18
top ................................................................................................................................. 18
time ............................................................................................................................... 19
sample ........................................................................................................................... 19
Xcode 测量工具 ........................................................................................................................ 22
Instruments................................................................................................................................ 23
设定和数据收集 ............................................................................................................. 24
性能分析选项 ................................................................................................................. 25
基本分析 ......................................................................................................................... 27
原始码 ............................................................................................................................. 29
数据挖掘I:Focus ......................................................................................................... 31
数据挖掘II:Pruning ..................................................................................................... 34
内部测量 .................................................................................................................................. 35
测试 ................................................................................................................................ 36
dtrace(dynamic tracing,动态跟蹤) .................................................................................... 37
职责之外的最佳化 ....................................................................................................................... 38
总结 .......................................................................................................................................... 39
3 CPU:陷阱和最佳化技巧 .................................................................................................. 41
数据表示 .................................................................................................................................. 41
基本类型 ......................................................................................................................... 42
字元串 ............................................................................................................................. 45
对象 .......................................................................................................................................... 47
存取器 ............................................................................................................................. 48
公共访问(Public Access) ........................................................................................... 51
对象创建和快取 ............................................................................................................. 52
可变性和快取 ................................................................................................................. 53
惰性求值 ......................................................................................................................... 55
快取注意事项 ................................................................................................................. 55
陷阱:通用(中级)表示 ............................................................................................. 57
数组和批处理 ................................................................................................................. 58
字典 ................................................................................................................................ 60
讯息传递 .................................................................................................................................. 63
IMP 快取 ......................................................................................................................... 65
转发 ................................................................................................................................ 67
均匀性和最佳化 ................................................................................................................. 69
方法 .......................................................................................................................................... 70
陷阱:CoreFoundation ................................................................................................... 70
多核 .......................................................................................................................................... 71
执行绪(Thread) .............................................................................................................. 72
工作伫列 ......................................................................................................................... 73
有节制地最佳化 ........................................................................................................................... 74
4 CPU 实战:XML 解析 ................................................................................................... 77
HTML 扫描器 ........................................................................................................................... 78
将回调映射为讯息.................................................................................................................... 81
对象 .......................................................................................................................................... 83
对象的高效性能 ....................................................................................................................... 85
性能评估 .................................................................................................................................. 88
调整 .......................................................................................................................................... 91
最佳化整个组件:MAX .............................................................................................................. 92
MAX 实现 ................................................................................................................................ 94
总结 .......................................................................................................................................... 95
5 记忆体:原理 .................................................................................................................... 97
记忆体层次结构 ........................................................................................................................... 97
Mach 虚拟记忆体 ....................................................................................................................... 103
堆和栈 .................................................................................................................................... 104
栈分配 ........................................................................................................................... 106
使用malloc()进行堆分配 ....................................................................................... 108
资源管理 ................................................................................................................................ 111
垃圾回收 ....................................................................................................................... 111
Foundation 对象所有权 ................................................................................................ 112
跟蹤垃圾回收 ............................................................................................................... 113
自动引用计数(Automatic Reference Counting) ...................................................... 114
过程式资源回收 ........................................................................................................... 115
总结 ........................................................................................................................................ 115
6 记忆体:测量与工具 ....................................................................................................... 117
Xcode 计量表 .......................................................................................................................... 117
命令行工具 ............................................................................................................................. 118
top ............................................................................................................................... 118
heap .............................................................................................................................. 120
leaks 及malloc_debug ......................................................................................... 122
代码内进行记忆体测量 .............................................................................................................. 123
记忆体监测工具 ......................................................................................................................... 124
Leaks .............................................................................................................................. 124
Allocations ..................................................................................................................... 125
VM Tracker .................................................................................................................... 132
计数器与性能监测事件 ............................................................................................... 133
总结 ........................................................................................................................................ 134
7 记忆体:陷阱和最佳化技巧 ................................................................................................ 137
引用计数 ................................................................................................................................ 137
避免记忆体泄漏 ............................................................................................................... 139
Foundation 对象和基本类型对比 .......................................................................................... 141
更小的结构 ............................................................................................................................. 143
千禧危机 ....................................................................................................................... 145
压缩 ............................................................................................................................... 145
可清除记忆体 ................................................................................................................... 146
记忆体与并发 ............................................................................................................................. 146
架构注意事项 ......................................................................................................................... 147
临时分配与对象快取 .............................................................................................................. 152
NSCache 与libcache ............................................................................................................... 153
记忆体映射档案 ......................................................................................................................... 154
madvise ................................................................................................................................ 157
iOS 注意事项 .......................................................................................................................... 158
ARC 最佳化 ............................................................................................................................... 158
总结 ........................................................................................................................................ 161
8 记忆体管理实战:FilterStream 架构 ............................................................................... 163
UNIX 管道及过滤器 ............................................................................................................... 163
面向对象的过滤器.................................................................................................................. 165
DescriptionStream .................................................................................................................... 166
消除description 中的无限递归 ........................................................................... 170
数据流层次结构 ..................................................................................................................... 172
总结 ........................................................................................................................................ 173
9 Swift ............................................................................................................................ 175
Apple 所声称的Swift 性能 .................................................................................................... 175
语言特性 ....................................................................................................................... 177
基準代码 ....................................................................................................................... 179
Swift 性能评估 ........................................................................................................................ 180
基本性能特徵 ............................................................................................................... 180
集合 ............................................................................................................................... 181
更进一步 ................................................................................................................................ 190
Nginx HTTP 解析器 ..................................................................................................... 190
Freddy JSON 解析器 .................................................................................................... 191
图片处理 ....................................................................................................................... 191
观察 ............................................................................................................................... 192
编译时间 ................................................................................................................................ 193
类型推断 ....................................................................................................................... 193
泛型特化 ....................................................................................................................... 195
全模组最佳化 ................................................................................................................... 197
控制编译时间 ............................................................................................................... 197
面向最佳化器编程 ..................................................................................................................... 198
一个足够智慧型的编译器 .......................................................................................................... 199
最佳化编译器之死 ........................................................................................................... 201
实用建议 ....................................................................................................................... 203
备用方案 ....................................................................................................................... 204
总结 ........................................................................................................................................ 207
10 I/O:原理 .................................................................................................................. 209
硬体 ........................................................................................................................................ 209
硬碟驱动器 ................................................................................................................... 209
固态硬碟 ....................................................................................................................... 211
网路 ............................................................................................................................... 212
作业系统 ................................................................................................................................ 212
抽象概念:位元组流 ....................................................................................................... 212
档案I/O ......................................................................................................................... 214
网路栈 ........................................................................................................................... 218
总结 ........................................................................................................................................ 218
11 I/O:测量与工具 ........................................................................................................ 221
负形空间:top 与time ....................................................................................................... 222
信息概览:iostat 和netstat......................................................................................... 223
Instruments.............................................................................................................................. 224
详细追蹤:fs_usage .......................................................................................................... 228
总结 ........................................................................................................................................ 231
12 I/O:陷阱和最佳化技巧 ................................................................................................ 233
将位元组封装为NSData ............................................................................................................ 233
记忆体映射异常 ............................................................................................................... 235
如何分块 ....................................................................................................................... 237
UNIXy I/O ............................................................................................................................... 238
网路I/O .................................................................................................................................. 240
堆叠传输 ....................................................................................................................... 241
限制请求 ....................................................................................................................... 243
数据处理 ....................................................................................................................... 244
异步I/O ......................................................................................................................... 245
HTTP 服务 .................................................................................................................... 246
序列化 .................................................................................................................................... 250
记忆体转储 ....................................................................................................................... 251
一个简单的XML 格式 ................................................................................................. 252
属性列表 ....................................................................................................................... 254
归档 ............................................................................................................................... 256
序列化总结 ................................................................................................................... 258
CoreData ................................................................................................................................. 260
批量创建和更新 ........................................................................................................... 261
Fetch 和Fault 技术 ....................................................................................................... 263
对象互动 ....................................................................................................................... 266
子集 ............................................................................................................................... 266
分析 ............................................................................................................................... 267
SQLite ..................................................................................................................................... 267
关係型和其他非资料库 ............................................................................................... 269
事件发布 ................................................................................................................................ 270
混合形式 ....................................................................................................................... 271
隔离存储 ................................................................................................................................ 272
总结 ........................................................................................................................................ 272
13 I/O:实战 .................................................................................................................. 273
iPhone 游戏字典 ..................................................................................................................... 273
有趣的属性列表 ..................................................................................................................... 277
二进制属性列表读取器 ............................................................................................... 278
懒载入 ........................................................................................................................... 282
避免中间代码 ............................................................................................................... 284
逗号分隔值 ............................................................................................................................. 287
公共运输调度数据.................................................................................................................. 289
站点信息 ....................................................................................................................... 290
站点停靠时间检索 ....................................................................................................... 291
站点停靠时间导入 ....................................................................................................... 292
更快的CSV 解析 .................................................................................................................... 294
对象分配 ....................................................................................................................... 294
Push 与Pull 的比较 ...................................................................................................... 296
感兴趣的键 ................................................................................................................... 296
并行 ............................................................................................................................... 296
总结 ........................................................................................................................................ 299
14 图像和UI:原理 ........................................................................................................ 301
回响能力 ................................................................................................................................ 301
软体和API .............................................................................................................................. 302
Quartz 和PostScript 图像模型 ............................................................................................... 305
OpenGL .................................................................................................................................. 307
Metal ....................................................................................................................................... 307
图形硬体加速 ......................................................................................................................... 307
从Quartz 到Core Animation .................................................................................................. 311
总结 ........................................................................................................................................ 314
15 图像和UI:测量和工具 ............................................................................................. 315
CPU 分析仪 ............................................................................................................................. 315
Quartz 调试 .............................................................................................................................. 317
Core Animation 工具 ............................................................................................................... 318
当CPU 不再是问题 ................................................................................................................ 319
我在测量什幺 ......................................................................................................................... 327
总结 ........................................................................................................................................ 329
16 图像和UI:陷阱和最佳化技巧 ...................................................................................... 331
陷阱 ........................................................................................................................................ 331
最佳化技巧 ................................................................................................................................ 332
过多通信导致安装缓慢 .......................................................................................................... 333
节流显示 ....................................................................................................................... 333
使用节流显示 ............................................................................................................... 335
今日安装程式和进度报告 ........................................................................................... 335
iPhone 无法承受之重 ............................................................................................................. 336
一切都是假象 ......................................................................................................................... 338
图像的缩放和剪下 ....................................................................................................... 338
缩略图绘製 ................................................................................................................... 340
如何确定没有绘製缩略图 ........................................................................................... 341
如何真的不绘製缩略图 ............................................................................................... 341
如何绘製非缩略图 ....................................................................................................... 342
在iPhone 上绘製直线 ............................................................................................................ 344
总结 ........................................................................................................................................ 346
17 图像和UI:实战 ........................................................................................................ 347
优美的天气套用 ..................................................................................................................... 347
更新 ............................................................................................................................... 348
探索PNG ...................................................................................................................... 348
头脑风暴 ....................................................................................................................... 350
JPEG 数据点 ................................................................................................................. 350
测量时的小错误 ........................................................................................................... 351
JPNG 与JPJP ................................................................................................................ 353
优美的启动 ................................................................................................................... 353
Wunderlist 3 ............................................................................................................................. 354
Wunderlist 2 ................................................................................................................... 354
整体架构 ....................................................................................................................... 355
URI 与进程中REST ..................................................................................................... 356
最终一致的异步数据存储 ........................................................................................... 357
RESTOperation 伫列 ..................................................................................................... 358
流畅、反应灵敏的UI .................................................................................................. 359
简评Wunderlist ............................................................................................................. 361
总结 ........................................................................................................................................ 361