基础知识 - 优化

启动优化

加载info.plist拉取配置信息(启动闪屏,沙盒信息)
创建沙盒信息
Mach-O加载可执行文件,递归加载所有的动态库
创建runtime动态加载类或者分类的load方法
程序执行
调用main
调用UIApplicationMain
调用applicationWillFinishLaunching

1.减少启动时对象的创建
2.延时或者异步执行动态库的加载等
3.减少load的加载,启动过程中会动态加载所有类和分类的load方法
4.减少不必要的图片资源,减少包体积大小
5.减少xib、storyboard的使用,

内存优化

1.图片大图加载时使用imageWithContentOfFile,这种加载方式会把大图加载到缓存中,当对象销毁是,加载到内存中的图片也会释放掉,imageNamed:将图片加载到缓存中,只加载一次,对象销毁不会释放
2.对应多图模式,比如9宫格的情况,劲量使用缩略图来显示,减少图片的尺寸和质量
3.对象创建后要及时销毁,由于autoReleasepool中对象是延时销毁的,所以针对瞬间产生大量累内存的情况,销毁会不及时,这时可以使用自定义autoreleasepool,加速对象的销毁
4.对象的创建,使用轻量级的对象 绘制 如果 能使用calayer绘制的就使用calayer,通过GPU渲染不会消耗内存
5.懒加载

图片编解码

通过UIImage创建的图片被添加到UIImageView上,并且UIImageView被添加到视图显示时,会自动触发图片的解码操作,将二进制的图片文件解码成对应的位图,由于这个动作有CPU完成,且都是在主线程完成,所以,会很耗时,比较好的方式是将此步动作放在子线程来完成,使用SDWebImage/YYImage等源码都有图片的解码操作,异步解码,解码将位图提交给GPU,由GPU来进行图形的合成和纹理的渲染,将结果提交到帧缓存去,由视频控制器在下一个vsync信号到来之前提交显示器上,如果此时数据未能处理完成则会照成卡顿的情况
SDWebImage做完图片的编码后,将图片放在一个自检的autoreleasepool中,这样可以及时释放内存,防止峰值内存的情况
SDWebImage图片的缓存原理:
拿到url去缓存中查找,如果找到了,将图片在内存中缓存一份,未找到则根据url的md5值从沙盒中查找,如果找到了再内存一份再返回显示,如果沙盒未找到,则开始启动下载流程,先显示占位图,在查询当前url是否在下载队列中,如果已经在队列中了则等待,防止重复下载,如果不在下载队列中,则根据把当前url加入到下载队列中,直接下载完成后保存在缓存中,刷新ui显示出来,然后把图片保存在沙盒中

性能优化

内存泄漏

posted @ 2022-08-10 09:54  qqcc1388  阅读(5)  评论(0)    收藏  举报