iOS状态恢复与用户默认设置和SQLite之间的差异?

oymdgrw7  于 2023-02-20  发布在  iOS
关注(0)|答案(1)|浏览(105)

我目前知道的:

  • 当应用挂起时,不会释放其内存空间,但会暂停应用的代码执行。这意味着当前内存中的任何变量和对象在应用恢复时仍将存在。
  • 但是,如果应用程序长时间处于挂起状态,或者系统需要为其他应用程序释放内存,操作系统可能会选择终止应用程序以释放资源。终止应用程序时,将释放其所有内存和数据,下次启动应用程序时将从头开始。
  • 如果您的应用已实现状态保留和恢复,则您使用encodeRestorableState方法保存的任何数据都将在应用恢复时可用,即使应用在此期间已终止。
  • 如果您的应用尚未实现状态保留和恢复,则在应用暂停或终止之前未保存的任何数据都将丢失。这就像在主屏幕上从头开始一样。

我感到困惑的是:

这些陈述意味着状态恢复方法的主要目的是在应用的整个生命周期中保留应用的状态,特别是当应用被终止并从内存中完全删除时。这是因为如果应用只是暂时挂起,然后再恢复,那么当前内存中的任何变量和对象在我们返回时仍然存在。
如果这是真的,application(_:shouldRestoreSecureApplicationState:)的用途是什么?当我们已经有了诸如UserDefaults和SQLite这样的工具时,我们真的需要它吗?或者它只是这些现有工具之上的一个内置层?

62lalag4

62lalag41#

应用程序状态与应用程序数据不同。
以文字处理软件为例:
用户正在处理的文档的内容是application data。他们正在处理的文档的名称和他们选择的字体样式是application state 的示例。
iOS 4之前,没有应用暂停状态;当用户按下主页按钮时,活动应用程序被终止,并在他们点击应用程序图标时重新启动。
应用程序状态保留对于给人给予应用程序实际上一直在运行的印象非常重要,而不仅仅是在用户接了一个电话后让他们回到应用程序的初始屏幕。
虽然现在应用程序实际终止需要一段时间,但如果您的应用程序具有用户期望维护的复杂状态,则采用状态恢复非常重要。例如,对于字处理程序,状态恢复可能至关重要。对于始终显示最新“提要”的社交媒体应用程序,状态恢复可能根本不重要。
虽然您可以使用UserDefaults甚至Core Data来存储和检索应用程序状态,但encodeRestorableState为每个UIViewController子类提供了一种优雅的方式,可以将其状态隔离地提供给恢复过程,而无需将UIViewController类紧密耦合到某个状态恢复对象,如果使用Core Data或UserDefaults,则会发生这种情况。

相关问题