我使用FMDB sqllite包裝(https://github.com/ccgus/fmdb),我很期待這個代碼從多個線程中執行一些代碼。因此,我使用FMDatabaseQueue
類來執行所有數據庫工作。FMDB排隊 - 這個模式是如何正確實現的?
我由圖案,例如糊塗一點點
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
什麼時候?
謝謝。我猜測一個人不應該從FMDatabase隊列中排隊另一個塊,然後呢? +感謝指向代碼的指針! – ConfusedNoob
一個問題 - 我應該塊內環路上的FMResultSet還是確定要傳遞出來的塊(不知道是否有隱藏的智慧清理在塊結束的任何東西) – ConfusedNoob
你需要做的塊內循環。 – ccgus