iOS性能优化之内存篇

Posted JackLee18

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS性能优化之内存篇相关的知识,希望对你有一定的参考价值。

  之前项目开发过程中也有对内存进行优化,但是并没有进行系统的优化,更多是隔一段时间优化一些。最近自己总结了一些自己的心得体会分享给大家,希望大家能够多多批评指正。

app内存优化方向

降低运行内存峰值

1、减少不必要单例的使用,尽可能减少单例对占内存较大对象的强持有
2、排查内存泄漏
3、降低图片缓存工具SDWebImage最大缓存值,保证必要的流畅性
4、大图尽量不要使用[UIImage imageNamed:@“”],(ps:系统会进行缓存)
5、在整个app运行期间不销毁的对象能够通过一定的类似归档的机制,进行快速的恢复与创建,比如tabbar上的页面,切换的到某个页面时,其他几个tab上的页面进行归档,切换回来的时候进行恢复。(ps:要根据事情情况决定,避免反复创建与销毁)
6、在条件允许的情况下,尽可能降低图片的品质

降低运行期间内存峰值的波动

1、对较大数据操作时,通过stream的形式进行,具体场景如下:
  1)上传文件的时候
  2)下载文件的时候(下载的时候,也可以通过将数据写进文件的形式)
  3)socket传输文件的时候
  4)本地导入大文件的时候,比如对大文件进行md5运算的时候
2、加载大图的时候采取优化措施(ps:具体可以搜下,网上相关的博客很多,这里不再一一列出)
3、及时释放不再使用的对象
  1)对于业务中存在循环创建的逻辑,要及时释放不再需要的,比如电商app存在一个循环流程:商详页->其他页面->商详页->其他页面。应该进行限制,比如循环了几次后需要把中间的某些页面给释放掉,避免内存一直增加。
  2)循环体内创建的占内存较大的对象通过autoreleasepool及时释放
  3)app没有打开的RN页面时,及时把RN的bridge释放掉。(ps:这个bridge很占内存)

4,内存调度策略
1、 在开辟一块大内存之前,及时释放一些内存,避免同时出现持有多个占用内存较大的对象.比如在打开RN页面时,SDWebImage清理下缓存中的图片,将一些可以恢复的对象暂时销毁掉等。
2、根据长期观察的结果,结合机型对不同的手机采取不同的内存调度策略。

app内存优化的阶段

app收到内存警告前进行优化

  在合理的范围内,尽最大可能降低app运行内存峰值,降低app运行内存峰值的波动

app收到内存警告后进行优化

  以最快的速度降低内存峰值,防止app被系统杀死。可以根据剩余内存、收到内存警告的次数、机型等一些额外信息制定内存释放的等级。在必要的时候可以让不重要的业务作出牺牲。

更多干货文章,扫描下方二维码关注公众号

以上是关于iOS性能优化之内存篇的主要内容,如果未能解决你的问题,请参考以下文章

iOS性能优化

iOS 性能优化 - Allocations分析内存分配

iOS 性能优化 - Allocations分析内存分配

Android性能优化之内存篇

[Android 性能优化系列]内存之基础篇--Android怎样管理内存

Google官方 详解 Android 性能优化史诗巨著之内存篇