我使用 CoreData,我正在考虑什么时候应该删除浪费(或过期)的数据。
根据我的想象,要点如下:
- 当应用程序启动时。
- 当应用程序终止时。(在应用程序委托中
applicationWillTerminate:
)
我猜一个是没有风险的,但我不希望用户在清除过程中等待。(我知道看门狗异常。如果purge时间超过20秒,我会准备一个视图控制器等待。)
两个看起来不错。用户看不到等待时间。但是,我不确定这一点是否合适?有人说后台进程时间有限。
我使用 CoreData,我正在考虑什么时候应该删除浪费(或过期)的数据。
根据我的想象,要点如下:
applicationWillTerminate:
)我猜一个是没有风险的,但我不希望用户在清除过程中等待。(我知道看门狗异常。如果purge时间超过20秒,我会准备一个视图控制器等待。)
两个看起来不错。用户看不到等待时间。但是,我不确定这一点是否合适?有人说后台进程时间有限。
无论哪种方式,您很可能会从在辅助线程上运行清理中受益。但是,您很可能无法使用第二个选项:
根据Apple 文档的相关内容applicationWillTerminate
:
您对此方法的实现大约有五秒钟的时间来执行任何任务并返回。如果该方法在时间到期之前没有返回,系统可能会完全终止该进程。
您可以使用的一种选择是清理,applicationDidEnterBackground:
但这也有一些复杂性:
您对此方法的实现大约有五秒钟的时间来执行任何任务并返回。如果您需要额外的时间来执行任何最终任务,您可以通过调用 beginBackgroundTaskWithExpirationHandler: 从系统请求额外的执行时间。在实践中,您应该尽快从 applicationDidEnterBackground: 返回。如果该方法在时间用完之前没有返回,则您的应用程序将被终止并从内存中清除。
这可能是一个更好的解决方案,您可以通过我链接到的文档深入了解一些建议。尽管在应用程序启动期间这样做可能最容易。