【发布时间】:2014-04-05 17:05:52
【问题描述】:
我在我的 iOS 应用程序中使用FMDB 来存储各种信息...
有时可能会发生多个线程同时访问我的FMDatabase,所以我决定使用FMDatabaseQueue 与我的SQLite 数据库进行交互。
在我看来,不可能打开和关闭FMDatabaseQueue 底层FMDatabase。这是正确的吗?
是否可以在应用程序启动时创建一个FMDatabaseQueue 实例,在所有地方和多个线程中使用它,并在应用程序退出时关闭它?
如果不是:谁能解释一下FMDatabaseQueue 的工作原理?
【问题讨论】:
-
是的,你是对的。事实上,即使在使用
FMDatabase的单线程应用程序中,通常也建议打开一次。 -
@Rob 奇怪的是,当我使用
FMDatabaseQueue方法(如inTransaction或inDatabase)访问底层FMDatabse时,它并没有打开。我收到错误The FMDatabase <FMDatabase: 0x7bf23b40> is not open.我尝试在inTransaction方法的开头添加一行代码[db open];,然后它运行良好。你知道我为什么要在这里显式打开数据库吗?另外,如果我明确打开它,是否也需要关闭它? -
@Sam - 如果您在
FMDatabaseQueueinDatabase或inTransaction中对数据库执行了close,则可能会发生这种情况。当您使用FMDatabaseQueue时,您永远不应调用传递给您的FMDatabase中的close。