在同一个后台线程上运行 FMDB 进程?

Posted

技术标签:

【中文标题】在同一个后台线程上运行 FMDB 进程?【英文标题】:Run FMDB processes on the same background thread? 【发布时间】:2011-10-13 08:17:42 【问题描述】:

我在使用 fmdb 将数据读取和写入同一数据库时遇到问题。

在我的应用中有一些实例,其中 1 个类会在后台线程上将数据写入数据库,而另一个类会在主线程上从同一个数据库中读取数据,读取和写入进程都处理相当大的数据,例如几百个 NSDictionary。

我听说 fmdb 不是“线程安全的”,当我在上述场景中尝试读写时,它会使我的应用程序崩溃。我也听说过在同一个线程上运行 2 个 fmdb 进程的建议,这样应用就不会崩溃。

我尝试在后台线程中运行它们(使用 NSInvocationOperation)但它崩溃了,我意识到它们实际上是在导致冲突的单独后台线程上运行。

所以问题是,我怎样才能让所有 fmdb 进程在同一个后台线程上运行,这样它们才不会导致我的应用程序崩溃?

或者是否有其他方法可以处理我的 SQL 数据?

*对不起,如果我没有解释清楚,愿意澄清。

感谢阅读!

【问题讨论】:

【参考方案1】:

FMDatabaseQueue 是专门为这个案例制作的:https://github.com/ccgus/fmdb

试试看,如果没有意义,请告诉我。

【讨论】:

【参考方案2】:

如果您查看 FMDB 的最新文档,您会发现它们现在提供了一个队列,允许线程安全地使用 FMDB。

【讨论】:

以上是关于在同一个后台线程上运行 FMDB 进程?的主要内容,如果未能解决你的问题,请参考以下文章

如何在ios中每n秒连续在后台线程中运行一个进程

总是在后台运行线程/进程?

如何在 IOS Swift 中使用 SQLite 使用 FMDB 处理多个线程

如何检查Android后台服务线程是不是正在运行

如何将 sizeForItemAt 放在后台线程上?

如何在 iOS 的后台线程中运行 XMPP Room Join & Invite 进程