首先 数据库插入的规则: 上一条操作执行完后 下一条操作才能执行
如果在数据库操作的数据比较庞大的时候 主线程 会卡 (运行特别慢) 解决方式:
给数据库添加子线程
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];
这样问题就解决了