【发布时间】:2013-08-19 07:21:30
【问题描述】:
我有一些使用 FMDB sqllite 包装器 (https://github.com/ccgus/fmdb) 的代码,我希望这些代码可以从多个线程中执行。因此,我使用FMDatabaseQueue 类来执行所有数据库工作。
我对这种模式有点困惑,例如
FMDatabaseQueue *q = [FMDatabaseQueue databaseQueueWithPath:@""];
[q inDatabase:^(FMDatabase *db) {
NSLog(@"1");
BOOL yn = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS Foo (Bar TEXT)"];
NSLog(@"2%@", yn ? @"YES" : @"NO");
}];
NSLog(@"3");
如果您查看上面的代码.. 是否保证 3 将始终在 2 和 1 之后记录?这样执行线程会被阻塞,直到提供给队列的块实际执行?
如果是这样,我是否应该删除块外部和之后的任何非数据库工作,以便使用队列的任何其他线程不会被不需要跨线程同步的工作阻塞?
另外,使用FMDatabaseQueue时需要打电话给[db open]吗?
【问题讨论】:
标签: ios objective-c sqlite fmdb