iOS:是否使用单例访问sqlite数据库

标签 ios database sqlite singleton

我有一个应用程序,其中有一个简单的表存储在 common sqlite 数据库中。该应用程序有一个 mainview 和其他几个 View ,比如 view1, view2, ....,viewN。从 mainview,用户通过以下代码部分转到 view1:

screen.modalTransitionStyle=UIModalTransitionStyleCoverVertical;
        [self presentModalViewController:screen animated:YES];

view1中,用户会访问数据库,做一些事情,然后更新数据库,相当view1回到mainview:

[self dismissModalViewControllerAnimated:YES];

用户将对其他 View 执行相同的操作,即访问数据库、执行某些操作、更新数据库,然后返回到 mainview

我的问题是我应该如何组织数据库,使用单例创建一个公共(public)对象以在 mainview 打开数据库,然后所有 View 都将访问数据库,更新它或每个 View 都会打开数据库,访问它,然后单独更新或者是否有任何其他有效的方法。谢谢

最佳答案

正如您所描述的您的应用程序结构只有一个线程 - 使用单例是完全可以的。您只需要在应用程序启动时打开数据库一次,并确保在应用程序结束时甚至在应用程序进入后台时关闭它(当然,您也需要在从后台返回时打开数据库)

顺便说一句,我还尝试为每个 View 打开和关闭数据库 - 这也很好用。在这种方法中,我有时还会使用一个“脏”标志,该标志被设置为指示数据库在关闭前需要更新——但结果证明这对性能没有影响。

除了使用单例,您还可以使用类变量或在您的应用程序委托(delegate)中声明它,这通常是为核心数据的上下文完成的(核心数据中的“上下文”类似于您的数据库)

无论您使用何种方法,重要的是您的数据库始终处于一致状态,因为您的应用可能会被电话“打断”。

顺便说一句,如果情况允许,我更倾向于在 iPhone 上更频繁地使用核心数据,因为核心数据会处理许多数据库问题——只需要明确地保存一致的状态。但这实际上取决于您的数据是一个大数据库还是只是“一些”持久对象/属性。

关于iOS:是否使用单例访问sqlite数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12340942/

相关文章:

database - 如何在QLDB中按降序获取记录?

MySQL 选择一对多

php - 将数据库保存在内存中,即使客户端脚本断开连接

android - 获取今天生日的联系人

ios - 从 HealthKit 读取锻炼数据的最佳方法

ios - 如何在 Swift 中获取一条线上的所有点?

ios - AVComposition 在 Airplay 上中断

ios - 如何以编程方式更改 UICollectionView 单元格位置

sql - 在 Visual C# 中连接到 SQL Server

python - 当查询以注释开始时,python 的 sqlite3 中的隐式提交