我有一个应用程序,其中有一个简单的表存储在 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/