FMDB 在操做龐大數據時的線程問題

首先  數據庫插入的規則:   上一條操做執行完後  下一條操做才能執行
 
若是在數據庫操做的數據比較龐大的時候  主線程 會卡  (運行特別慢)  解決方式:
給數據庫添加子線程 
 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{
        for (int i = 0; i < 1000; i++) {
             [[FMDBManager sharedIntance] insertTableNameWIthTableName:@"Dota" name:@"lasy" gender:@"f" age:@"12" image:UIImagePNGRepresentation([UIImage imageNamed:@"2.jpg"]) myID:@"5"];
               }
            });           
 
但添加子線程後 若是多個子線程在 異步 操做時 會致使程序 Crash  解決方式:  用 block 隊列操做  代碼以下:
#注意: 若是NSOperationQueue 是局部的 每執行一次都會有一個不一樣的 block 隊列在執行 顧添加成屬性的NSOperationQueue 對象   
self.queue = [[NSOperationQueue alloc] init];
 
NSBlockOperation *block1 = [NSBlockOperation blockOperationWithBlock:^{
  for (int i = 0; i < 1000; i++) {
            [[FMDBManager sharedIntance]
insertTableNameWIthTableName:@"Dota"name:@"lasy"gender:@「女"age:@"12"image:UIImagePNGRepresentation([UIImageimageNamed:@"2.jpg"]) myID:@「2」]; 
        }
   }];
NSBlockOperation *block2 = [NSBlockOperation blockOperationWithBlock:^{
        for (int i = 0; i < 1000; i++) {
            [[ FMDBManager sharedIntance] insertTableNameWIthTableName:@"Dota" name:@"sony" gender:@「男" age:@「22" image:UIImagePNGRepresentation([UIImage imageNamed:@「3.jpg"]) myID:@「1"];
        }
    }];   
[self.queue addOperation:block1];
[self.queue addOperation:block2];
 
感受這樣確實能解決 多個子線程在 異步 操做時的問題了 但實際上在運行時 仍是會 Crash 的, 那該怎麼辦呢?
即使使用了 FMDB 第三方 
添加屬性的 NSOperation 的 對象  在 viewDidLoad 中初始化  並設置他的最大併發執行次數 代碼以下 :
 
[self.queue setMaxConcurrentOperationCount:1];
 
這樣問題就解決了 
相關文章
相關標籤/搜索