gpt4 book ai didi

ios - 保护对 NSManaged 对象数组的读/写访问

转载 作者:行者123 更新时间:2023-11-28 15:15:38 25 4
gpt4 key购买 nike

我有一个 NSManagedObjects 数组,它由几个片段共享,一些在主队列上,一些在回调闭包中。有时,当我清除这个数组时,代码的其他部分会尝试访问它以在 UI 上读取和显示数据,但有时找不到数据会崩溃。

我正在考虑使用 NSLocks 来保护这个数组的写入或读取,但是我不确定这种方法是否安全和正确。我愿意接受建议或对此方法的更正。

最佳答案

苹果 does not recommend在不同线程之间共享相同的 NSManagedObject:

NSManagedObject instances are not intended to be passed between queues. Doing so can result in corruption of the data and termination of the application. When it is necessary to hand off a managed object reference from one queue to another, it must be done through NSManagedObjectID instances.

您应该在不同线程上拥有对象的不同副本。

我认为你的情况有两个问题:

  1. 共享 NSManagedObject 的第一个问题。如果一个线程上的 NSManagedContext 丢弃了他的缓存,那么如果其他线程使用上下文中的 NSManagedObjects,您将在其他线程上遇到异常。
  2. 你们在线程上共享相同的 NSMutableArray。如果您在一个线程(数据源线程)上从数组中删除对象,而其他线程(例如 UI 线程)尝试获取已删除索引上的对象,您将遇到范围异常。要解决这种情况,您应该将数组复制到其他线程,并通知他们新数据可用。你应该这样做,因为 NSMutableArray is not thread safe .

关于ios - 保护对 NSManaged 对象数组的读/写访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46907521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com