猜你喜欢
iOS性能优化实战

iOS性能优化实战

书籍作者:珲少 ISBN:9787121361524
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:3100
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

所谓性能,无非是一种指标,在软件开发中,性能指标往往会关注两个方面:效率和消耗。效率主要是指代码的执行效率,动画的流畅度,应用的冷启动时间和热启动时间,网络通讯的阻塞时间等等。消耗只要是指内存的消耗,有没有内存泄露,CPU的占用率,耗电与应用程序包尺寸等。本书主要讨论在iOS应用性能优化中,有哪些性能指标可能是你需要考虑的。并将向你介绍如何使用工具来分析一款iOS应用的性能问题。并且,也会向读者介绍在iOS软件开发过程的更多高级技巧。

作者简介

张益辉,TicTalk Foundation合伙人,博客笔名珲少,曾就职于唯品会,参与特卖项目《唯品会》、唯品会美妆项目《唯美》、唯品会返利项目《唯享客》。iOS开发、Swift 语言、Objective-C 语言、Java 与JavaScript语言、Android 等相关技术博客370余篇。任麦子学院iOS金牌讲师,良师益友网、51CTO学院、CSND网络学院签约讲师,开源中国高手问答栏目受邀技术专家,博客访问量90多万次。

编辑推荐
适读人群 :本书可以帮助iOS开发工程师、编程爱好者更深入地理解iOS开发原理,更高效地开发出高质量的应用程序。

很资深:一线资深工程师5年的工作经验与总结

很图解:近200张图详细讲解iOS优化方法

很实战:100多段实用代码,领会优化精髓

很超值:赠送720分钟界面开发及优化视频教学


前言

前 言

首先感谢你购买本书作为提高iOS开发技能的学习教程。作为一名最前沿的程序开发者,我非常理解当需要深入学习一门技术却无从下手时的迷茫与急迫感。因此在编写本书时,我尤其注意将重点、难点及开发过程中极易被忽视却十分重要的点突出讲解,希望能够帮助你用最短的学习时间,得到最显著的提高。

阅读本书目录,你会发现,本书不是一本基础的iOS开发教程,如果你没有丝毫的iOS开发基础,那么本书对你来说可能会有难度而且不易理解,如果真是这样,我建议你先学习iOS基础开发知识,再来阅读本书,一定会受益匪浅。

学习一门编程语言、掌握一种程序开发技术会让你从中获得极大的乐趣。科技领域的高速发展使得企业和公司需要越来越多的编程技术人员,市场上的编程书籍琳琅满目,其中的大多数侧重于基础入门与应用实战,就iOS开发来说,如果你想深入地了解这门技术,那么本书是非常好的选择。

本书内容及体系结构

本书分为9章,内容规划如下。

第1章介绍开发一款高性能的iOS应用需要关注的性能指标,并介绍了如何使用工具来监测和优化应用程序的性能。之前你可能只是发现某个界面会卡顿,在学习本章内容后你将可以找到具体是由哪一行代码造成的卡顿。

第2章介绍iOS开发中的内存管理技术,如果你是iOS开发初学者,那么你可能从未关心过内存管理的问题,但是随着学习的深入,你需要清楚地了解内存管理的原理和需要注意的事项。在混合开发、底层框架开发中,内存管理更是重中之重。要成为一名卓越的iOS开发工程师,这是你必须迈出的一步。

第3章介绍网络技术在iOS开发中的应用,并提供一些思路来解决网络卡顿问题,提升用户体验。还会介绍一些常用的辅助工具,帮助你对网络进行检查,对当前网络状态进行快照或模拟操作。

第4章介绍应用程序的启动流程及与启动流程相关的一些技术点,如推送的应用、高级的VoIP推送和网络电话功能的应用。

第5章深入介绍iOS视图与动画的相关内容,重点介绍UITableView组件的优化方法与思路,完整介绍动画技术在iOS开发中的应用。

第6章系统地介绍iOS多线程开发技术的应用,包括NSThread、NSOperation及高级的GCD相关用法。

第7章介绍动态特性与运行时,这部分内容也是iOS程序开发的高级技巧,在很多情况下你可能都不需要使用到这些技术,但是学习它们可以帮助你更好地理解程序的运行原理,也可以帮助你一眼看出一些奇怪问题出现的核心原因。

第8章介绍JavaScript技术在iOS开发中的应用,主要介绍Native与WebView的交互方式以及高级的JavaScript线程应用。在学习本章之后,你就能够很轻松地理解Hybird App混合开发的原理。

第9章是本书的扩展章节,主要介绍App Extension的相关应用及数据交互的方法,灵活地使用App Extension可以为你的应用程序添加有趣而实用的新功能。

希望本书可以帮助你达成自己的学习目标,下面的博客是我几年来的编程生活积累的一些财富,里面有关于iOS开发、Android开发、前/后端开发以及编程语言相关的400余篇博客,如果需要,你可以挑选自己感兴趣的内容阅读:

https://my.oschina.net/u/2340880

你也可以在下面的网站找到我的一些教学资源:

https://edu.csdn.net/lecturer/course_list

我是一名知识传播者,也是学习者,如果你在学习的过程中,遇到任何问题或者发现了本书的遗漏或错误之处,可以与我联系,我的QQ号码是:316045346。当然,在出版前,我和编辑以及所有校验和整理本书的老师都付出了很多汗水,尽量保证让它尽善尽美地呈现在你的面前。

最后,感谢编辑在本书编写过程中提出的宝贵意见和在修订过程中的辛苦工作,感谢吕远、练向、帅坤、东科以及其他同学和同事在生活和工作中给我的帮助和启发,大家经常性的技术讨论使我受益颇多。感谢其他所有为本书出版付出汗水的人们。如果本书可以给你带来提高与帮助,那么这一切都是值得的。

本书读者对象

在职的iOS开发工程师

编程爱好者

iOS开发初学者

关注iOS项目优化的工程师

需要深入学习iOS程序工作原理的工程师

目录

目 录

第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

产品特色