gpt4 book ai didi

ios - 如果未关闭 sqlite 数据库,是否有可能丢失数据?

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:19:38 24 4
gpt4 key购买 nike

如果 SQLite DB 在 iOS/iPhone 中没有正确关闭,是否有可能丢失数据?

我正在考虑在 applicationWillTerminate 中关闭数据库,但首先要确保这不会产生任何不良副作用。

最佳答案

在大多数情况下,不会; sqlite3 在返回之前将所有内容写入“磁盘”(并根据需要调用 fflush/fsync/etc)。

有一个很大的异常(exception):如果关闭数据库时有未提交的事务,下次打开时它会回滚。

究竟会发生什么取决于PRAGMA journal_mode :如果它是“内存”或“关闭”,如果您的应用程序在写入过程中崩溃,则数据库可能已损坏。我认为 PRAGMA locking_mode仅影响释放锁时发生的情况,不影响事务完整性。

请注意 -applicationWillTerminate: 无论如何都不够!如果您没有设置 UIApplicationExitsOnSuspend,这是 iOS 4 和足够新的设备(即比 iPhone 3G/iPod 2g 更新的设备)上的默认行为是发送 -applicationWillEnterBackground: 然后暂停您的应用程序(显然是使用 SIGSTOP)。如果操作系统稍后决定您的应用程序需要退出,它会发送 SIGKILL 而不会再给您的应用程序更多的 CPU 时间。您需要在 -applicationWillTerminate:-applicationWillEnterBackground: 中保存状态;主要区别在于您可以在后者中启动后台任务。

(另一个区别是你可能会在 -applicationWillTerminate 中做一些“清理”:当你刚刚移到后台时不应该发生这种情况,即使在你的应用程序即将退出时释放内存在很大程度上是一种浪费CPU 时间。)

关于ios - 如果未关闭 sqlite 数据库,是否有可能丢失数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4238866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com