版本记录
版本号 | 时间 |
---|---|
V1.0 | 2021.05.13 星期四 |
前言
MetricKit
由iOS13系统进引入,用来汇总和分析有关异常和崩溃诊断以及电源和性能指标的每个设备的报告。下面我们就一起来看下这个框架。感兴趣的可以看下面几篇文章。
1. MetricKit框架详细解析(一) —— 基本概览(一)
2. MetricKit框架详细解析(二) —— Improving Your App's Performance(一)
3. MetricKit框架详细解析(三) —— Reducing Your App's Memory Use(一)
4. MetricKit框架详细解析(四) —— Gathering Information About Memory Use(一)
Overview
通过解决过度使用的常见原因,减少应用程序对内存的使用。
将应用程序的内存使用量增长本地化为特定功能或操作后,就可以进行更改以减少内存使用量。下面介绍了过多使用内存的常见原因以及可以采取的减少其影响的措施。
Optimize Image Assets
大图像,尤其是在高色彩深度时,会占用大量内存。针对与应用程序捆绑在一起的资产进行优化,以使其显示大小。将其他来源(例如,网络服务或用户的图片库)加载的图像转换为适当的比例和颜色深度。对这些转换使用Image I/O可以最大程度地减少对内存的影响。 WWDC 2018 Session 416
,iOS Memory Deep Dive,提供有关选择适当的Image I/O
转换的建议。
Reduce the Size of Core Data Transactions
Core Data在内存中将对NSManagedObject实例的更改存储在内存中,直到保存了与它们关联的NSManagedObjectContext为止,这时它会将更改写入父NSManagedObjectContext
或persistent store
中。在更改进入persistent store
之前,它们一直驻留在内存中,因此您的应用在两次保存之间的时间越长,Core Data
的工作量就越大。相反,您的应用保存得越频繁,它对设备固态驱动器的写入就越多,这会影响性能并增加驱动器的磨损。设计应用程序的持久性模型(persistence model)
,以在这两个资源约束之间取得平衡。
Discard Unused View Objects
锁定屏幕或后台运行应用程序时,用户不会查看您应用程序的视图。在此期间,无需将图像,视频,SceneKit scenes
以及其他与视图相关的对象保留在内存中。当您的应用进入后台时释放与视图相关的内容,并在重新进入前台时再次准备视图。有关准备将应用程序供后台使用的信息,请参阅 Managing Your App's Life Cycle。
Eliminate Memory Leaks
当分配的内存变得无法访问并且应用无法取消分配内存时,就会发生内存泄漏。允许分配的内存指针超出范围而不释放内存可能会导致内存泄漏。应用程序对象图中的循环引用也可能导致内存泄漏。当应用在retain cycle
中删除对任何对象的引用时,强引用将保留在该cycle
内,并且不会释放对象。
使用Leaks profiling template来检测内存泄漏。Instruments
会定期扫描您的应用程序正在使用的内存,以报告已分配但无法访问的内存区域。 Leaks
仪器显示泄漏内存的地址和大小,以及堆栈跟踪,显示负责分配内存的代码。
Remove References to Unused Objects
应用可能会累积已分配,可以访问但不使用的内存。这种未使用的内存可增加应用程序的内存使用量,而不会增加其功能,也不会出现在诸如Leaks
仪器之类的泄漏检测工具中。
例如,社交媒体应用程序可能会从服务加载消息列表,并通过消息标识符将其存储在字典中。当用户滚动其时间轴时,该应用程序会将更多消息加载到词典中,以便在用户点击消息时可以快速显示更多信息。如果没有从该字典中清除较早消息的策略,则随着用户沿列表的滚动方向滚动,消息可能会无限增长。
确保您的应用仅保留对支持用户当前使用的功能所需的对象的引用。丢弃旧内容,或将其写入磁盘以供以后检索。例如,当用户滚动到这些消息时,社交媒体应用可以从其字典中丢弃消息。
后记
本篇主要讲述了
Making Changes to Reduce Memory Use
,感兴趣的给个赞或者关注~~~