iOS性能优化思路
运行速度(静态检测-Analyze、运行时检测-Profile)表现形式页面流畅度。本质上是降低CPU、GPU的消耗。CPU复杂逻辑运算,包括对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制;GPU是由多个小单元运算器组成的高并发运算器,负责纹理的渲染。
CPU相关优化
轻量级对象代替复杂对象(如CALayer替代UIView);缓存,空间换时间(缓存布局、缓存图片、缓存重复使用的对象、字体和时间格式)imageWithName和imageWithContentOfFile;选择合适的数据结构和算法(包括本地数据结构和服务端数据结构统一,减少多余的转换);提前计算好布局,在需要时一次修改,不要多次修改图片的size最好刚好跟UIimageView的size保持一致控制线程的最大并发数量减少IO操作,子线程进行;延时加载,需要用到的时候再创建;启动速度优化(启动时间-Time Profile );减轻主线程压力(文本尺寸计算和绘制,图片解码和绘制)
GPU相关优化
减少视图数量和层次(合成视图或者异步绘制成一张图片);
[*]CPU能处理的最大纹理尺寸是4096x4096,一旦超过这个尺寸,就会占用CPU资源进行处理,所以纹理尽量不要超过这个尺寸
尽量减少短时间内显示大量的图片,可合成一张图片减少透明视图离屏渲染 圆角、光栅化;
使用了 mask 的 layer (layer.mask)需要进行裁剪的 layer (layer.masksToBounds / view.clipsToBounds)(贝塞尔曲线UIBezierPath、直接切一个带有圆角的图片等)设置了组透明度为 YES,并且透明度不为 1 的 layer (layer.allowsGroupOpacity/ layer.opacity)添加了投影的 layer (layer.shadow*)采用了光栅化的 layer (layer.shouldRasterize)绘制了文字的 layer (UILabel, CATextLayer, Core Text 等)
消耗内存
缓存模块要有清理机制图片压缩(本地图片压缩、网络图片压缩,根据展示大小压缩、缩略图)减少不比较的缓存防止内存泄露(随时检查、适当地使用AutoreleasePool)
Memory Leaks
Allocations
Analyse
MLeaksFinder
消耗电量
CPU和GPU(尽可能降低功耗)定位(快速确定位置用requestLocation,完成后定位器自动断点、适当关闭、降低精度)定时器(适时关闭)网络请求(无网时不请求)Io操作(避免频繁操作,累计一次进行操作)硬件检测优化
网络请求
减少网络数据(压缩 XML>JSON>ProtoBuf)合并请求合理利用缓存增量更新(时间戳etag、lastUpdate)断线续传检测网络状态,网络不可用时不尝试进行请求提供取消网络请求的操作,避免长时间的网络请求提供批量传输。下载资源时尽量一次下载尽可能多的资源
运行稳定性
野指针线程安全(线程安全接口、可编辑类、同步、锁)通知、KVC&KVO内存监测主线程卡顿检测
包大小优化
编译器优化(多余符号、C++异常等)AppCode检测未使用代码,去除编写LLVM插件检测出重复代码、未被调用的代码图片、音频、视频压缩去除没有用到的资源
页:
[1]