免費開源的iOS開發學習平臺

                                                FMDB:3-線程安全(FMDatabaseQueue)

                                                在使用FMDB時,不要創建一個單例數據庫,然后在多個線程中使用。如果堅持要這么做,系統最終會崩潰會拋出一個異常。如果一定要在多個線程中使用,可以在每個線程中創建一個FMDatabase對象。另外,還有一個更好的方法就是使用FMDatabaseQueue類。用戶可以生成一個FMDatabaseQueue單例,然后在多線程中使用它,FMDatabaseQueue會負責同步和協調多線程。

                                                首先來創建一個FMDatabaseQueue隊列。

                                                FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath];
                                                

                                                然后這樣使用它:

                                                [queue inDatabase:^(FMDatabase *db) {
                                                    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @1];
                                                    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @2];
                                                    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @3];
                                                
                                                    FMResultSet *rs = [db executeQuery:@"select * from foo"];
                                                    while ([rs next]) {
                                                        …
                                                    }
                                                }];
                                                

                                                簡單包裝成事務的用法如下:

                                                [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
                                                    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @1];
                                                    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @2];
                                                    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @3];
                                                
                                                    if (whoopsSomethingWrongHappened) {
                                                        *rollback = YES;
                                                        return;
                                                    }
                                                    // etc…
                                                    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @4];
                                                }];
                                                

                                                欧美超级精品一级A片|欧美一级黄色视频|国产精品自在在线午夜免费|4444亚洲人成无码网在线观看|亚洲ⅴa曰本va欧美va视频