我有insertItemsAtIndexPath
方法进入单元格,当我尝试访问我的AVFoundation控制器类时,我有一半时间崩溃。我感觉它是主线程上的线程冲突,并试图使用逻辑来帮助,但这并没有解决问题。
我一直在阅读互斥和信号量,我想知道你的建议是如何处理上述过程的。基本上,我试图让[self presentViewController:myAVFoundationController]
不要与包含dispatch_asyn(dispatch_get_main_queue, ^{ [_collectionView insertItemAtIndexPath:@[indexPath]] };
我现在正在寻找@synchronized(),但似乎有很多选项通过the documentation I am looking at。其中包括:NSOperation / Queue,互斥,信号量等,以及如何在主队列上实现线程安全。
答案 0 :(得分:1)
只要与您的UI相关的任何内容都存在线程问题,并且写入与您的UI相关的任何值的任何内容都包含在dispafch_async(dispatch_get_main_queue(), ...)
;
通过在调试器中添加“所有异常”断点来暂停执行,然后查看所有线程的堆栈跟踪。
如果主线程是唯一做任何事情的线程,那么您就没有线程问题。只有主线程可以触及与用户界面相关的任何内容,并且应该在那里设置主线程上所需的任何属性。最后,不要在线程之间共享可变对象。在将I提供给另一个帖子之前,复制它(默认情况下副本是不可变的)。
答案 1 :(得分:0)
我找到了@synchronized
的运气,例如以下内容:
@synchronized([NSOperationQueue mainQueue]) {
[self uiUpdate];
}