iOS 性能优化之内存优化

栏目: IOS · 发布时间: 4年前

内容简介:Clean Memory 是指那些可以用以 Page Out(当内存不足的时候,系统会按照一定策略来腾出更多空间供使用,比较常见的做法是将一部分低优先级的数据挪到磁盘上) 的内存。Dirty Memory 是指那些被 App 写入过数据的内存。注意:Clean memory,也包括 App 所用到的 frameworks。每个 framework 都会有 _DATA 段和 _DATA_DIRTY 段,它们的内存是 Dirty 的。

iOS App 通常情况下的三种内存类型

  • Clean Memory

  • Dirty Memory

  • Compressed Memory

Clean Memory

Clean Memory 是指那些可以用以 Page Out(当内存不足的时候,系统会按照一定策略来腾出更多空间供使用,比较常见的做法是将一部分低优先级的数据挪到磁盘上) 的内存。

  • Code

  • frameworks (每个 frameworks 都有 _DATA_CONST 段,当 App 在运行时使用到了某个 framework,它所对应的 _DATA_CONST 的内存就会由 Clean 变为 Dirty)。

  • memory-mapped files (被加载到内存中的文件)

Dirty Memory

Dirty Memory 是指那些被 App 写入过数据的内存。

  • Heap allocations (所有堆区的对象)

  • 图像解码缓冲区

  • database caches ( 我们对数据进行缓存的目的是想减少 CPU 的压力,但是过多的缓存又会占用过大的内存。由于内存压缩机制的存在,我们需要根据缓存数据大小以及重算这些数据的成本,在 CPU 和内存之间进行权衡。

    在一些需要缓存数据的场景下,可以考虑使用 NSCache 代替 NSDictionary,因为 NSCache 可以自动清理内存,在内存吃紧的时候会更加合理。

注意:Clean memory,也包括 App 所用到的 frameworks。每个 framework 都会有 _DATA 段和 _DATA_DIRTY 段,它们的内存是 Dirty 的。

Compressed Memory

当内存吃紧的时候,系统会将不使用的内存进行压缩,直到下一次访问的时候进行解压。

例如,当我们使用 Dictionary 去缓存数据的时候,假设现在已经使用了 3 页内存,当不访问的时候可能会被压缩为 1 页,再次使用到时候又会解压成 3 页。

为什么要减少内存

让自己的App可以有更好的用户体验:更快的启动速度,不会因为内存过大而导致 Crash,可以让 App 存活更久等。

工具监控内存

  1. Xcode Debug Area

  2. Instruments

  3. DebugMemoryGraph

线上检查工具

Allocations

  • FBAllocationTracker

Leaked memory

  • MLeaksFinder

  • FBRetainCycleDetector

优化技巧方向

  • 视图层级很多的情况做一些处理

  • 对一些大的数据或者资源的处理

  • 对很多对象的处理

  • 避免内存抖动太大,比如可以用@autoreleasepool 处理for循环大量临时对象造成的问题。

  • 内存泄露的处理

  • 收到内存警告时候做一些处理,比如用 NSCache 代替 NSDictionary,使用 NSPurgableData 代替NSData。让系统在内存不足情况下自己清理内存。

  • 对图片的处理,比如格式的选择,或者缩放等。

参考链接:

https://mp.weixin.qq.com/s/WQ7rrTJm-cn3Cb6e_zZ4cA

https://wetest.qq.com/lab/view/367.html?from=content_juejin

https://github.com/skyming/iOS-Performance-Optimization

https://juejin.im/post/5b23dafee51d4558e03cbf4f

WWDC:session_242__ios_app_performance_memory

推荐阅读

100天iOS数据结构与算法实战前15篇

关注公众号关注最新动态

iOS 性能优化之内存优化


以上所述就是小编给大家介绍的《iOS 性能优化之内存优化》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

最优化导论

最优化导论

Edwin K. P. Chong、Stanislaw H. Zak / 孙志强、白圣建、郑永斌、刘伟 / 电子工业出版社 / 2015-10 / 89.00

本书是一本关于最优化技术的入门教材,全书共分为四部分。第一部分是预备知识。第二部分主要介绍无约束的优化问题,并介绍线性方程的求解方法、神经网络方法和全局搜索方法。第三部分介绍线性优化问题,包括线性优化问题的模型、单纯形法、对偶理论以及一些非单纯形法,简单介绍了整数线性优化问题。第四部分介绍有约束非线性优化问题,包括纯等式约束下和不等式约束下的优化问题的最优性条件、凸优化问题、有约束非线性优化问题的......一起来看看 《最优化导论》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具