随着 iPhone 11 和 iPhone 11 Pro 的发布,iFixit 也在随后展示了三款新机型的拆解文章 。根据拆解情况来看,三款手机均采用了 4 GB 的 RAM。相较之下,同样于近期发布的 Google Pixel 4 则采用了更大的 6 GB 内存。而如果把目光放到国内的 Android 阵营,8 GB 甚至 10 GB 的内存参数也早已不算新鲜。回溯过往就会发现,iPhone 在内存大小上始终比同代的 Android 机型保守许多。但较小的内存并没有对 iPhone 的竞争力产生影响。这一切还要多亏 iOS 的内存管理机制。经过一代代的迭代和完善,iOS 的内存管理从最初的严苛逐渐多样化,在保持了对内存的严格管理的基础上,也针对不同应用的需求,提供了更多的解决方案。首先需要介绍的,是苹果的消息推送服务 APNs(Apple Push Notification service)。借助这一功能,应用可以在不保留后台进程的情况下,正常地接收消息和推送。在一般情况下,应用接收到的消息,是直接从其服务器端传至应用。这样的操作虽然环节较少,但是需要应用始终在后台保留进程,自然也就增加了对内存的需求。相较之下,APNs 服务新增了不少环节。应用服务器端发来的消息不会再直接传送给应用本身。作为替代,推送会借助系统的服务器传输给 iOS 系统,并由后者弹出通知横幅。当你通过横幅打开应用时,应用才会开始从服务器段接收更新,并显示新内容。这也是为什么有时我们收到微信消息后,往往打开应用还需要等待一段时间才能看到消息内容。APNs(来源:sspai.com/post/55884)尽管这样的设定带来了一些延迟,但其好处也非常明显。应用不再需要在后台保留进程,从而极大节省了内存空间。APNs 自从在 iOS 2.0 中推出后,便一直被沿用至今。那时的 iOS 系统,还未有「后台运行」的概念,所有应用在切至后台后都会被直接中止进程。正是得益于这一功能,早年 iOS 严格的后台管理才不会影响应用的正常功能。不过,消息接收和推送并不是应用后台常驻的问题的全部。一部分应用由于其功能所需,即使在被切至后台后也不应该被中止进程。iOS 也为这一类应用提供了「网开一面」的待遇:只要应用的功能包含音频播放、语音通话、GPS 定位等,就可以在后台保持运行,不存在被系统「杀后台」的问题。这样的设定非常自然,避免了诸如微信被切至后台后,语音通话中断等问题。除了上文提到的情况,iOS 还于 iOS 7 提供了新的后台选项:后台应用刷新。
借助这一特性,iOS 系统的应用可以实现在后台获取通知,传输数据。例如,新闻资讯 App 可以在后台接收内容更新,从而在你打开应用前就加载完毕最新的消息内容。不过,具体的后台使用时段却并非由应用本身控制,而是由 iOS 系统统一安排,从而防止应用滥用后台权限,占用过多内存的问题。随着 iOS 13 的发布,苹果也引入了新的后台管理机制。借助设备端的机器学习,iOS 系统可以更为智能地为应用安排后台计划,更好地实现应用后台需求和设备内存管理之间的平衡。关于 iOS 系统的后台管理,你可以在 Power+ 这篇文章《 从极度克制到逐步开放:iOS 的后台运行进化之路 》中了解更多。
- 《 从极度克制到逐步开放:iOS 的后台运行进化之路 》
- 《 iPhone 为什么不加大内存?余以为的回答 》