iOS和macOS性能优化:Cocoa、Cocoa Touch、Objective-C和Swift
Marcel Weiher是一位在Cocoa技术方向上有超过25年经验的软件工程师和研究员。Marcel的工作一直聚焦在性能优化上,包括在BBC解决不可能的预压榨问题,和在Apple的Mac OS X 性能团队帮助其他Apple工程师提升代码的性能。除了帮助知名公司和新兴公司创建了成功的软件,帮助开发团队,Marcel也会做培训课程,分享博客,在会议上做演讲,贡献开源项目,并开发像Higher Order Messageing这样的新技术。他也致力于开发语言的研究,从1987年开始做Objective-C的实践,最后研究了Objective-Smalltalk。Marcel目前是柏林Microsoft的首席软件工程师,维护已有的软件,并为公司提供咨询顾问。
李俊阳(星夜暮晨),Realm 中文翻译,SwiftGG 翻译组核心成员,《Xcode 江湖录》作者之一。沉迷 Swift,自 Swift 发布以来一直在探索…
查看完整
李俊阳(星夜暮晨),Realm 中文翻译,SwiftGG 翻译组核心成员,《Xcode 江湖录》作者之一。沉迷 Swift,自 Swift 发布以来一直在探索…
查看完整
随着应用功能的日益增加,性能问题也逐渐浮出水面,进入我们的视野之中。本书作者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
^ 收 起
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
^ 收 起
Marcel Weiher是一位在Cocoa技术方向上有超过25年经验的软件工程师和研究员。Marcel的工作一直聚焦在性能优化上,包括在BBC解决不可能的预压榨问题,和在Apple的Mac OS X 性能团队帮助其他Apple工程师提升代码的性能。除了帮助知名公司和新兴公司创建了成功的软件,帮助开发团队,Marcel也会做培训课程,分享博客,在会议上做演讲,贡献开源项目,并开发像Higher Order Messageing这样的新技术。他也致力于开发语言的研究,从1987年开始做Objective-C的实践,最后研究了Objective-Smalltalk。Marcel目前是柏林Microsoft的首席软件工程师,维护已有的软件,并为公司提供咨询顾问。
李俊阳(星夜暮晨),Realm 中文翻译,SwiftGG 翻译组核心成员,《Xcode 江湖录》作者之一。沉迷 Swift,自 Swift 发布以来一直在探索和学习 Swift 的开发和使用;热爱开源,多次向 Swift、Realm Cocoa 开源库贡献代码;喜欢独辟蹊径,目前在 App Store 上架了专门为彝族同胞开发的「彝文输入法」,希望通过自己的努力让所有人都能享受科技带来的便利。
马超,iOS 开发工程师,目前就职于某金融公司手机炒股部门,SwiftGG 翻译组核心成员。自 Apple 推出 Swift 语言之后开始学习并应用到 iOS 项目开发中,已上架多款应用到 App Store,目前专注于 Server-Side Swift 的开发,正在构思实现一个底层开源库;业余时间喜欢逛技术博客,翻译外文以及和技术大牛交流学习。新浪微博@Ninth_Day。
程伟,SwiftGG 翻译组核心成员,曾做过路由器、防火墙等安全硬件产品的 firmware 研发工作,对 iOS 开发也颇有研究,自 Swift 发布以来一直关注着它的发展,并保持有对新技术的热忱。目前就职于某国企负责项目管理工作,业余时间喜欢看书、跑步、烧菜,研究大前端技术栈,希望能通过自己的努力为国内的技术发展添砖加瓦。
^ 收 起
李俊阳(星夜暮晨),Realm 中文翻译,SwiftGG 翻译组核心成员,《Xcode 江湖录》作者之一。沉迷 Swift,自 Swift 发布以来一直在探索和学习 Swift 的开发和使用;热爱开源,多次向 Swift、Realm Cocoa 开源库贡献代码;喜欢独辟蹊径,目前在 App Store 上架了专门为彝族同胞开发的「彝文输入法」,希望通过自己的努力让所有人都能享受科技带来的便利。
马超,iOS 开发工程师,目前就职于某金融公司手机炒股部门,SwiftGG 翻译组核心成员。自 Apple 推出 Swift 语言之后开始学习并应用到 iOS 项目开发中,已上架多款应用到 App Store,目前专注于 Server-Side Swift 的开发,正在构思实现一个底层开源库;业余时间喜欢逛技术博客,翻译外文以及和技术大牛交流学习。新浪微博@Ninth_Day。
程伟,SwiftGG 翻译组核心成员,曾做过路由器、防火墙等安全硬件产品的 firmware 研发工作,对 iOS 开发也颇有研究,自 Swift 发布以来一直关注着它的发展,并保持有对新技术的热忱。目前就职于某国企负责项目管理工作,业余时间喜欢看书、跑步、烧菜,研究大前端技术栈,希望能通过自己的努力为国内的技术发展添砖加瓦。
^ 收 起
随着应用功能的日益增加,性能问题也逐渐浮出水面,进入我们的视野之中。本书作者Marcel Weiher在性能调优领域有着丰富的经验,在他的带领下,你将会了解如何提升CPU、内存、I/O、图像、Swift等方面的性能,如何在开发过程中定位到性能的瓶颈和问题,他同时还介绍了性能优化的编程技巧和*佳实践,从而帮助你写出更高效、更快速的代码。此外,你还将学习到定位性能问题的工具使用方法以及*佳实践,并跟随示例来学习性能优化。本书适合寻求进阶及所有对性能优化感兴趣的iOS 开发人员阅读。
比价列表
1人想要
公众号、微信群
缺书网
微信公众号
微信公众号
扫码进群
实时获取购书优惠
实时获取购书优惠