我有一个 NSManagedObjects 数组,它由几个片段共享,一些在主队列上,一些在回调闭包内。有时,当我清除这个数组时,代码的其他部分会尝试访问它以读取并在 UI 上显示数据,并且由于它有时找不到数据而崩溃。
我正在考虑使用 NSLocks 来保护这个数组的写入或读取,但是我不确定这种方法是否安全和正确。我愿意接受建议或纠正这种方法。
Apple不建议在不同线程之间共享相同的 NSManagedObject:
NSManagedObject 实例不打算在队列之间传递。这样做可能会导致数据损坏和应用程序终止。当需要将托管对象引用从一个队列传递到另一个队列时,必须通过 NSManagedObjectID 实例来完成。
您应该在不同的线程上有不同的对象副本。
我认为在你的情况下你有两个问题: