基本工具、
业务优化、
内存优化、
卡顿优化、
布局优化、
电量优化、
安装包瘦身、
启动优化、
网络优化
iOS 性能优化常用套路、技术分析及其面试提示
1 iOS 性能优化介绍
1.1 智能机的新纪元
1.2 为什么性能优化很重要,及其处理思路
1.3 怎么读这本书
1.4 技术栈
1.5 准备啥
1.6 怎么看
1.7 概览
1.8 常见性能问题:
1.8.1 安装包瘦身
1.8.2 解决界面卡顿
2 Instruments 大法,运行时间分析,电量分析,UI 性能 (Swift 语言)
2.1 模拟器和真机:用真机做衡量
2.2 内存与性能
2.3 工具
2.3.1 基础工具: Instruments 介绍
2.3.2 内存分配
2.3.3 性能工具
2.4 常用套路
2.4.1 运行时间分析介绍
2.4.2 解决运行时间异常
2.4.3 解决 App 启动时间分析异常
2.4.4 解决内存问题
2.4.5 解决 UI 绘制问题, Core Animation 层次上
2.4.6 解决耗电问题
2.5 小结
3 优化表视图的性能: UITableView
3.1 一个例子
3.1.1 介绍 Instruments
3.1.2 例子一
3.1.3 例子二
3.2 常用优化
3.2.1 缓存高度
3.2.2 透明度
3.2.3 避免图形效果
3.3 小结
4 使用缓存技术,提高性能: 缓存图片
4.1 使用磁盘文件、内存和网络, 在性能上的不同
4.2 介绍缓存
4.2.1 缓存什么
4.2.2 对的缓存
4.2.3 错的缓存
4.2.4 查询消耗
4.2.5 存储消耗
4.2.6 缓存有效性
4.2.7 缓存算法
4.2.8 计算缓存
4.3 怎样使用缓存
4.3.1 图片放在哪里
4.3.2 缓存数据 ( 使用 Memory Sanitizer 优化)
4.4 小结
5 数据和数据结构层次上的优化
5.1 来一个例子
5.2 测量算法性能的理论问题
5.2.1 大 O 标记
5.2.2 具体实现
5.2.3 著名算法的大 O 标记
5.3 实际测量
5.4 数据结构与算法
5.4.1 苹果的数据结构
5.4.2 其他数据结构
5.4.3 二叉树
5.4.4 图
5.5 其他算法的解决姿势
5.5.1 递归
5.5.2 XML 解析
5.6 小节
6 使用多线程,并发使用数据
6.1 介绍线程和多线程
6.2 线程名词
6.3 第一个例子
6.4 多线程的优势
6.5 怎么写多线程的应用
6.5.1 创建一个线程
6.5.2 设置线程
6.5.3 线程的输入
6.5.4 使用线程的风险
6.5.5 解决线程同步
6.5.6 其他选择: 计时器等
6.6 使用 Instruments 优化线程 ( 使用 Thread Sanitizer 优化)
6.7 小节
7 内存使用上,优化性能
7.1 回顾一下
7.1.1 手工管理内存( 面试的时候,可能会问到 )
7.1.2 自动释放
7.1.3 自动释放池
7.2 自动引用计数
7.2.1 ARC 策略
7.2.2 ARC 的新标准
7.2.3 其他属性
7.3 现在的内存管理
7.3.1 循环引用问题
7.3.2 使用弱引用
7.3 视图控制器
7.3.1 视图控制器的加载
7.3.2 视图控制器的释放
7.3.3 界面上,显示与隐藏视图
7.4 对象拷贝
7.4.1 浅拷贝与深拷贝
7.4.2 实现深拷贝
7.4.3 对象的拷贝
7.5 现在使用的自动释放池
7.6 使用 Instruments
7.6.1 静态分析
7.6.2 内存泄漏
7.6.3 僵尸对象
7.6.4 内存分配
7.6.5 内存警告层次上
8 应用的多任务处理中,多线程有效管理内存
8.1 手机的多任务处理
8.1.1 多任务的使用姿势
8.1.2 多任务的优缺点
8.2 后台任务
8.2.1 音频任务
8.2.2 展示启动界面
8.2.3 定位服务
8.2.4 本地通知
8.2.5 网络电话
8.2.6 后台处理
8.2.7 处理后台运行的触发
8.2.8 系统状态改变的通知
8.3 处理 iOS 多版本
8.4 小结
9 使用 C / C++ , 提高性能
9.1 优缺点
9.2 C 与 C++ 介绍
9.2.1 使用 C
9.2.2 使用 C++
9.3 例子
9.3.1 SQLite
9.3.2 C++ 的例子
9.4 小结
11 CPU 使用原则
11.1 来个例子
11.1.1 微处理器基线的风险
11.1.2 更多的整型计算
11.1.3 Swift
11.1.4 其他语言
11.2 混合应用的威力
11.3 趋势
11.4 操作的成本
11.5 计算的复杂性
11.6 小结
12 CPU 的测量及其工具
12.1 命令行工具
12.1.1 top 命令
12.1.2 time 命令
12.1.3 sample 命令 (采样)
12.2 Xcode 评估
12.3 Instruments
12.3.1 启动与数据采集
12.3.2 分析选项
12.3.3 基本分析
12.3.4 源代码
12.3.5 数据挖掘: 聚焦
12.3.6 数据挖掘: 修建
12.4 内部测量
12.4.5 单元测试
12.5 Dtrace 动态跟踪
12.6 调用背后的优化 ( 超出意料的优化 )
12.7 小结
13 CPU 错误及其解决
13.1 表示
13.1.1 基础类型
13.1.2 字符串
13.2 对象
13.2.1 访问
13.2.2 公共的访问
13.2.3 创建对象与缓存
13.2.4 可变性与缓存
13.2.5 惰性求值
13.2.6 缓存警告
13.2.7 泛型表示的缺点(直接表示的缺点)
13.2.8 数组和批量处理
13.2.9 字典
13.3 发消息
13.3.1 缓存 IMP
13.3.2 消息转发
13.3.3 均匀性和优化
13.4 方法
13.4.1 使用 CoreFoundation 的常见错误
13.5 多核的 CPU
13.5.1 线程
13.5.2 工作队列
13.6 测量优化
14 CPU 例子,XML 解析
14.1 一个 HTML 扫描器
14.2 回调到消息的映射
14.3 对象
14.4 廉价的对象
14.5 赋值
14.6 调优
14.7 优化整个部件: MAX
14.8 MAX 的实现
14.9 小结
15 内存使用原则
15.1 内存的层级
15.2 Mach 虚拟内存
15.3 堆与栈
15.3.1 栈分配
15.3.2 使用 malloc() 方法,分配堆的内存
15.4 资源管理
15.4.1 垃圾回收
15.4.2 Foundation 框架下的对象拥有
15.4.3 追踪垃圾回收
15.4.4 自动引用计数
15.4.5 进程级别的资源回收
15.5 小结
16 内存的测量及其工具
16.1 Xcode 计量
16.2 命令行工具
16.2.1 top 命令
16.2.2 heap 命令(堆)
16.2.3 leaks 和 malloc debug
16.3 内部测量
16.4 用 Instruments 调试内存
16.4.1 使用 Instruments 的 Leaks 功能
16.4.2 使用 Instruments 的 Allocations功能
16.4.3 使用 Instruments 的 VM Tracker 功能(虚拟内存追踪者)
16.4.4 使用 Instruments 的 Counters/ PM Events 功能(计数 / PM 事件 )
16.5 小结
17 内存的错误及其解决
18 内存例子,过滤流
19 Swift
20 I/O 使用原则
21 I/O 的测量及其工具
22 I/O 的错误及其解决
23 I/O例子
24 图形化与界面的使用原则
25 图形化与界面的测量及其工具
26 图形化与界面的错误及其解决
27 图形化与界面例子
1.0
https://github.com/skyming/iOS-Performance-Optimization
FPS
内存
App 启动,
冷启动和热启动
主要是热启动。
Before main() ,
mian 函数前面
Dylib Loading, load dynamic libraries.
Rebase / Binding, Rebase and Binding time. Objective-C 类的数量,有着直接的影响。
Obj-C Setup, 通常这不是瓶颈, 通过改进 Rebase / Binding,提高这一块。
Initializers。 Objective-C 类里面的 + load 方法有影响。
加载时间,
搞 Timer
Code, CADisplayLink
Xcode Debug
Instrument.
页面卡顿怎么解决
电池
https://www.zhihu.com/question/34834773
原文链接
这个问题我们也是试了很久才解决的。
一开始,无论填什么号码都不行,换了好多手机号码,固定电话号码,都不行。
后来终于找到了窍门:关键在于你注册的第一步,选国家的时候一定要根据你的VPN的国家来选,不是选中国的。到了第二步,用中国的手机号就能注册了。