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];
 
这样问题就解决了 
相关文章
相关标签/搜索