iOS性能优化实战
作者:珲少
出版社:电子工业出版社
出版时间:2019-05-01
ISBN:9787121361524
定价:¥99.00
目 录
第1章 关于性能你需要知道的事 1
1.1 衡量应用程序性能优劣的一些标准 1
1.1.1 代码的执行效率 2
1.1.2 内存占用 4
1.1.3 CPU负担与能耗 5
1.1.4 动画流畅度 7
1.1.5 网络缓存 8
1.1.6 应用程序启动时间 9
1.1.7 应用程序包尺寸 9
1.2 Xcode断点与静态分析工具 10
1.2.1 添加自定义断点 10
1.2.2 为自定义断点添加行为 11
1.2.3 添加全局类型的断点 13
1.2.4 Xcode的静态分析工具 14
1.3 Instruments:性能分析和测试工具 16
1.3.1 Activity Monitor:活动监视器 16
1.3.2 Allocations:内存跟踪工具 17
1.3.3 CoreAnimation:核心动画监测工具 19
1.3.4 Counters:仪表计数器 20
1.3.5 Energy Log:能耗记录器 21
1.3.6 Leaks:内存泄漏检查工具 22
1.3.7 Network:网络连接检查工具 23
1.3.8 自定义Instruments工具模板 23
1.4 使用LLDB调试工具 25
1.4.1 使用expression指令进行动态代码执行 25
1.4.2 使用frame指令查看代码帧信息 27
1.4.3 使用thread相关指令操作线程 29
1.4.4 其他LLDB常用指令 33
1.5 日志与埋点 34
1.5.1 异常分析 35
1.5.2 使用Bugly异常捕获工具 41
1.5.3 应用程序埋点 43
1.5.4 使用Fabric分析工具 43
第2章 iOS内存管理 45
2.1 iOS的内存管理模型 45
2.1.1 关于内存消耗与引用计数 45
2.1.2 MRC内存管理 46
2.1.3 关于ARC 49
2.1.4 属性修饰符 51
2.1.5 ARC与MRC进行混编 53
2.2 自动释放内存 54
2.2.1 关于autorelease方法 55
2.2.2 自动释放池 57
2.2.3 系统维护的自动释放池 59
2.3 杜绝内存泄漏 60
2.3.1 Block与循环引用 61
2.3.2 代理与循环引用 63
2.3.3 定时器引起的内存泄漏 65
2.4 关于“僵尸”对象 66
2.4.1 捕获“僵尸”对象 66
2.4.2 处理“僵尸”对象 68
2.5 CoreFoundation框架中的内存管理 71
2.5.1 CoreFoundation中的引用计数 71
2.5.2 CoreFoundation框架与Foundation框架混用 72
2.6 扩展:关于id与void* 74
2.6.1 关于id类型 74
2.6.2 关于void与void* 75
2.6.3 解决最初的问题 76
第3章 应用程序网络与能耗优化 77
3.1 深入iOS网络开发技术 77
3.1.1 初识NSURLSession 79
3.1.2 NSURLConnection的简单应用 83
3.1.3 请求对象NSURLRequest 85
3.1.4 请求回执对象NSURLResponse 87
3.1.5 数据缓存对象NSURLCache 88
3.1.6 本地用户凭证对象NSHTTPCookie 90
3.1.7 使用第三方网络诊断库――LDNetDiagnoService_IOS 92
3.2 iOS网络开发及优化秘技 96
3.2.1 使用Charles抓包工具 96
3.2.2 使用Charles进行HTTPS抓包 100
3.2.3 使用Charles进行网络环境模拟 102
3.2.4 使用Charles添加请求断点 104
3.2.5 使用Charles进行数据模拟 106
3.2.6 Charles的请求重写功能 108
3.2.7 使用Mock.js搭建本地数据模拟服务 110
3.2.8 学习使用JSONModel库 116
3.2.9 属性自动生成工具 121
3.3 定位与地图 130
3.3.1 使用定位服务 130
3.3.2 原生地图开发 133
3.3.3 添加大头针与自定义标注 136
3.3.4 添加地图覆盖物 138
3.3.5 检索附近兴趣点和导航服务 140
3.4 定时器应用 146
3.4.1 NSTimer的简单应用 146
3.4.2 关于RunLoop的一些探究 148
3.4.3 中心化管理NSTimer定时器 149
3.4.4 CADisplayLink类的应用 153
3.4.5 使用GCD方式的定时器 154
第4章 从应用程序启动说起 156
4.1 应用程序的启动原理 156
4.1.1 深入UIApplication类 156
4.1.2 UIApplication相关类别介绍 159
4.1.3 关于UIApplicationDelegate 162
4.2 本地通知与远程推送 166
4.2.1 使用本地推送 166
4.2.2 远程推送基础 169
4.2.3 深入理解UserNotification框架 174
4.3 PushKit框架与CallKit框架 189
4.3.1 VoIP与PushKit 190
4.3.2 学习使用CallKit框架 192
4.3.3 来电拦截与号码识别 199
第5章 深入iOS视图与动画 204
5.1 关于视图控制器 204
5.1.1 UIViewController的生命周期 204
5.1.2 从StoryBoard加载UIViewController对象的传值陷阱 207
5.1.3 关于UIViewController的切换 209
5.2 视图控制器的转场动画 210
5.2.1 UIViewController的模态跳转转场 211
5.2.2 导航转场动画的自定义 218
5.2.3 UITabBarController的转场动画 221
5.3 列表视图的性能优化 221
5.3.1 UITableView的构建原理 221
5.3.2 对UITableView可变行高的优化方式 224
5.3.3 关于高度不定的列表分区头、尾视图 228
5.4 iOS图像绘制技术 230
5.4.1 CGPath路径类 231
5.4.2 理解图形上下文 238
5.4.3 颜色与色彩空间 252
5.4.4 图形变换函数 258
5.4.5 Patterns模型的应用 259
5.4.6 绘制梯度渐变视图 263
5.4.7 进行图像处理 268
5.4.8 关于层聚合 272
5.5 iOS核心动画技术 275
5.5.1 初识CoreAnimation 275
5.5.2 深入理解CALayer 277
5.5.3 几种常用的CALayer子类 282
5.5.4 CoreAnimation动画 287
第6章 iOS多线程开发技术 293
6.1 使用NSThread进行线程管理 293
6.1.1 NSThread中常用类方法 293
6.1.2 NSThread成员方法和属性的应用 295
6.1.3 隐式地使用NSThread进行多线程编程 296
6.2 NSOperation与NSOperationQueue的应用 296
6.2.1 关于Operation基类的解析 296
6.2.2 NSBlockOperation类的应用 297
6.2.3 NSInvocationOperation类的应用 299
6.2.4 操作之间的依赖关系 300
6.2.5 NSOperationQueue操作队列的应用 301
6.3 学习使用GCD 303
6.3.1 GCD的调度机制 303
6.3.2 添加任务到调度队列中 304
6.3.3 使用队列组 305
6.3.4 GCD对循环任务的处理 308
6.3.5 GCD中的消息与信号 309
6.3.6 队列的挂起与开启 310
6.3.7 使用GCD处理延时任务 310
6.3.8 数据存取的线程安全问题 311
6.3.9 GCD模式的单例 313
6.3.10 关于GCD中的内存管理 314
第7章 iOS运行时技术 315
7.1 动态的Objective-C语言 315
7.1.1 窥探消息转发机制 316
7.1.2 消息传递与继承链 318
7.1.3 拯救未知消息的三根救命稻草 320
7.1.4 你真的需要救命稻草吗 324
7.1.5 发送消息相关的几个函数 328
7.2 运行时方法解析 331
7.2.1 与运行时相关的类操作函数 332
7.2.2 与运行时相关的实例对象属性操作函数 334
7.2.3 与运行时相关的实例对象方法操作函数 337
7.2.4 与运行时相关的协议操作函数 340
7.3 运行时特性的基本应用 341
7.3.1 操作变量的巧妙方法 341
7.3.2 操作方法的巧妙方法 345
7.4 使用运行时动态修改UILabel的默认字体 348
7.4.1 使用框架统一处理 348
7.4.2 使用运行时函数替换UILabel的初始化方法 348
7.5 设置可自动归档的数据模型基类 352
第8章 JavaScript与Native交互技术的应用 354
8.1 JavaScriptCore框架详解 354
8.1.1 JavaScriptCore框架中的几个核心类 355
8.1.2 在Native中运行JavaScript脚本代码 356
8.1.3 在JavaScript脚本中调用Objective-C Native方法 358
8.1.4 深入JSContext类 359
8.1.5 深入JSValue类 360
8.1.6 Objective-C与JavaScript复杂对象的映射 365
8.1.7 C语言风格的API 366
8.1.8 设计Hybird App框架 371
8.2 WebKit框架的应用 377
8.2.1 WebKit框架概览 377
8.2.2 使用WKWebViewConfiguration对WebView进行配置 379
8.2.3 WKWebView中的属性和方法解析 382
8.2.4 WKWebView中的JavaScript与Native交互 384
8.2.5 WKNavigationDelegate协议中的方法解析 385
8.2.6 WKUIDelegate协议中的方法解析 388
第9章 iOS扩展开发 390
9.1 Today扩展的应用 390
9.1.1 创建Today扩展程序 391
9.1.2 Today扩展与宿主应用程序进行数据交互 393
9.2 分享扩展的应用 396
9.3 照片编辑扩展 399
9.4 自定义键盘扩展 400
9.4.1 了解UIInputViewController类 400
9.4.2 创建自定义的数字输入键盘 401
9.5 iMessage扩展的应用 404
9.5.1 开发独立的表情包 404
9.5.2 开发寄宿于宿主应用程序的表情包扩展 406
9.5.3 开发iMessage App 407
9.5.4 对开发iMessage App的几点建议 418