WWDC 2018:iOS 内存深入研究

本文详细介绍了iOS应用内存管理,包括为何减少内存使用、内存占用的各类类型,如Clean和Dirty Memory,以及压缩内存。探讨了分析内存占用的工具,如Xcode Memory Gauge、Instruments和Debug Debugger。此外,还讨论了图片内存优化,如选择正确的图片格式和利用UIGraphicsImageRenderer。文章强调了在后台时对内存优化的重要性,并提供了演示Demo作为实例。
摘要由CSDN通过智能技术生成

WWDC 2018 Session 416:iOS Memory Deep Dive

查看更多 WWDC 18 相关文章请前往 老司机x知识小集xSwiftGG WWDC 18 专题目录

作者:高老师,纯洁善良有理想的 iOS 开发一枚

引言

对于我们的 App 所依赖的设备而言,内存资源是有限的。降低 App 所使用的内存可以提高性能和体验,相反,过大的内存占用可能会导致 App 被系统强制退出。所以每个 iOS 开发者都应该关注内存问题。这一节新的内容不多,基本上都是一些老的知识点。

按照 Session 的套路,我们先看一下提纲:

  • 为什么要减少内存使用
  • 内存占用
  • 分析内存占用工具
  • 图像
  • 在后台时,对内存优化
  • 演示 Demo

那我们就按顺序开始啦!

为什么要减少内存

在探讨内存之前,我们要知道为什么要减少内存。简单的回答是可以有更好的用户体验:更快的启动速度,不会因为内存过大而导致 Crash,可以让 App 存活更久等。

内存占用

并非所有 App 的内存占用都是相同的。在继续探讨 iOS 上 App 的内存使用之前,我们先来聊一下Pages Memory

Pages Memory

内存是由系统管理,一般以页为单位来划分。在 iOS 上,每一页包含 16KB 的空间。一段数据可能会占用多页内存,所占用页总数乘以每页空间得到的就是这段数据使用的总内存。

内存页按照各自的分配和使用状态,可以被分为 CleanDirty 两类。

以上面的代码为例,申请一块长度为 80000 字节的内存空间,按照一页 16KB 来计算,就需要 6 页内存来存储。

  • 当这些内存页开辟出来的时候,它们都是 Clean
  • 当向处于第一页的内存写入数据时,第一页内存会变成 Dirty
  • 当向处于最后一页的内存写入数据时,这一页也会变成 Dirty

内存映射文件

当 App 访问一个文件时,系统内核会负责调度,将磁盘上的文件加载并映射到内存中。如果这是只读的文件,它所占用到的内存页是 Clean 的。

如下图所示,一个 50KB 的图片被加载到内存中时,需要分配 4 页内存来存储。其中第四页中有 2KB 的空间会被用来存储这个图片的数据,剩余空间可能会被用来存储其它数据。

典型app内存类型

当内存不足的时候,系统会按照一定策略来腾出更多空间供使用,比较常见的做法是将一部分低优先级的数据挪到磁盘上,这个操作称为 Page Out。之后当再次访问到这块数据的时候,系统会负责将它重新搬回内存空间中,这个操作称为 Page In

然而对于移动设备而言,频繁对磁盘进行IO操作会降低存储设备的寿命。从 iOS7 开始,系统开始采用压缩内存的办法来释放内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值