我有一些使用 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 之后记录?这样执行线程会被阻塞,直到提供给队列的块实际执行?
如果是这样,我是否应该在块之外和之后删除任何非数据库工作,以便使用队列的任何其他线程不会被不需要跨线程同步的工作阻塞?
[db open]
另外,使用时需要打电话FMDatabaseQueue
吗?