FMDB.database.beginTransaction 和 FMDB.databaseQueue.inTransaction 之间的区别

Posted

技术标签:

【中文标题】FMDB.database.beginTransaction 和 FMDB.databaseQueue.inTransaction 之间的区别【英文标题】:Difference between FMDB.database.beginTransaction and FMDB.databaseQueue.inTransaction 【发布时间】:2014-09-15 02:32:33 【问题描述】:

代码 A

FMDBDatabase *db = xxxxx
[db beginTransaction];
[db executeUpdate:xxxx];
xxxxxxx

代码 B

FMDBDatabaseQueue *queue = xxxxx
[queue inTransaction:^xxxxxx]

database.beginTransaction 和 databaseQueue.inTransaction 有什么区别? 正如我所看到的 inTransaction 只是将 sql 操作放入队列中,但 beginTransaction 似乎在 sqlite 级别做一些事情。哪一个是线程安全的更好选择,它们之间有什么区别?

【问题讨论】:

【参考方案1】:

不同之处在于,后者除了具有更好的语法外,声明式语法在多线程应用程序中使用是相当安全的,尤其是在多个线程共享单个数据库连接的情况下。后者使用一次执行一个操作的 FIFO 队列。

【讨论】:

以上是关于FMDB.database.beginTransaction 和 FMDB.databaseQueue.inTransaction 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章