找回密码
 立即注册
查看: 267|回复: 0

iOS性能优化思路

[复制链接]
发表于 2022-1-5 21:22 | 显示全部楼层 |阅读模式
运行速度(静态检测-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插件检测出重复代码、未被调用的代码图片、音频、视频压缩去除没有用到的资源
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-5-14 15:45 , Processed in 0.134654 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表