iOS和macOS性能优化:Cocoa、Cocoa Touch、Objective-C和Swift
[德]Marcel Weiher(马塞尔・韦伊尔) |电子工业出版社
0.00 ¥99.00
收藏
浙江图书馆
  • ISBN
    9787121338144
  • 印刷时间
    2018-07-01
  • 库存
    正在获取...
产品特色
产品特色
编辑推荐

√从基本原理出发,了解苹果设备性能的常见陷阱和误解,解决苹果系统性能问题;

√理解优化原则、测量、工具、陷阱和技巧;

√了解什么时候要仔细优化,什么时候不值得花时间优化;

√平衡性能和封装,创建高效的对象表示、通信、数据访问和计算;

√避免拖慢Objective-C程序和阻碍后续优化的错误;

√修复内存和资源管理中的漏洞和其他问题;

√解决与驱动器、网络、序列化和SQLite相关的I/O问题;

√了解代码绘图和不会对有限的iOS设备资源造成太大负担的用户界面;

√所有开发人员都需要了解的关于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 发布以来一直在探索和学习 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 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

相关推荐
读者免费借回家
加入书架成功