多线程访问共享数据的Bug
来源:互联网 发布:儿童教育软件推荐 编辑:程序博客网 时间:2024/06/14 10:11
在数据存储的一个代码段里:
- (void)saveQunMessageBubbles:(NSArray *)msgList withCallbackBlock:(void (^)(NSArray *savedMessages))callbackBlock{ NSArray *constMsgList = [msgList copy]; [_dbQueue inTransaction:^(FMDatabase *db, BOOL *rollback) { *rollback = NO; NSMutableArray *savedMessages = [[NSMutableArray alloc] init]; for (QunMessage *msg in constMsgList) {
最开始是没有copy数组的,那在for循环里就会有一个崩溃:类型为<__NSArrayM: 0x1781fc30> was mutated while being enumerated.在枚举的时候对array进行修改了。
原因就是穿进来的数组在外部是NSMutableArray。
解决方法是传进来之前copy一份,或者在这个函数里copy一份。如果传进去之前copy入口太分散了。
开始的解决方法是在线程里copy一份,但是发现出现了另外一个崩溃:[NSArray initWithArray:range:copyItems:]: range {0, 4} extends beyond bounds [0 .. 2]
正在copy的时候,外面修改了这个array也会导致崩溃。最后只能将其放在主线程里copy。
0 0
- 多线程访问共享数据的Bug
- 多线程访问共享数据的安全问题
- 多线程要访问共享数据的方式
- 多线程访问共享对象和数据的方式
- 多线程访问共享对象和数据的方式-总结
- 多线程访问共享对象和数据的方式
- 多线程访问共享对象和数据的方式
- 多线程访问共享数据(1)
- 多线程访问共享数据(2)
- 多线程访问共享数据(1)
- 多线程访问共享数据(2)
- 多线程访问共享对象和数据方法
- 多线程访问共享数据同步原因
- 多线程数据共享的方法
- 多线程访问共享数方式的总结
- 共享数据库连接多线程访问时的事务处理
- 多线程之3-------多个线程访问共享数据的方式
- java多线程之多个线程访问共享对象和数据的方式
- 通过java代码使用zookeeper
- 指针和引用的区别
- kali linux gnome3.4桌面合上笔记本盖子依然保持唤醒设置方法
- android之http通讯,
- EXISTS 和 IN
- 多线程访问共享数据的Bug
- Linux内核开发之中断与时钟(二)
- mysql 定时备份数据
- android 日历图标显示星期
- Linux内核开发之中断与时钟(三)
- Linux内核开发之中断与时钟(四)
- db万能数据库查询分析器
- Linux下 fcntl 函数用法说明
- OS X 10.10 Yosemite Beta可以下载了