gpt4 book ai didi

ios - Core Data 并发队列风格 MOC getters 线程安全

转载 作者:可可西里 更新时间:2023-11-01 03:29:26 26 4
gpt4 key购买 nike

我真的对下面直接来自 NSManagedObjectContext 的段落感到困惑 documentation :

Setter methods on queue-based managed object contexts are thread-safe. You can invoke these methods directly on any thread.

最大的问题是 ManagedObjectContext 上的 setter 方法,而不是此上下文拥有的 ManagedObjects 中的方法?还是两者都有?特别是如果对于私有(private)队列 MOC 对象是这样的:

[privateContext setPersistentStoreCoordinator:self.persistentStoreCoordinator];

无论执行此行的线程如何,都是线程安全的,但会像:

 [myPrivateQueueOwnedManagedObject setTitle:@"My Title];

也是线程安全的吗?文档对此非常含糊,但我的理解是这不是线程安全的,对吗?

ManagedObjectContext 中属性的 getter 怎么样,比如请求 persistentStoreCoordinator 属性是否是线程安全的?我的理解是不会。

此外,我一直认为某些托管对象属性(例如 objectID)是线程安全的,不需要使用 performBlock: 或 performBlockAndWait: 访问:托管对象上还有其他线程安全的属性吗?

最佳答案

-setPersistentStoreCoordinator: 是线程安全的,因为它是托管对象上下文 上的 setter 方法。

-setTitle: 不是因为您在托管对象 上调用 setter。

您可以使用调试标志确认此行为:

-com.apple.CoreData.ConcurrencyDebug 1

当您违反线程限制时,它会抛出一个断言。

更新

While we are at it just to confirm the second paragraph on the documentation, is it safe to access BOTH MOC and MO for main style queue MOC objects while on the main thread?. my understanding is that it is so for instance setTitle would be ok if the context was Main style and the thread was the main thread. This is for legacy reasons with thread confinement afaik, and also a great help when using the MO for UI updates.

如果上下文被定义为主队列并且您在主队列中(又名 UI 线程,又名主线程)那么是的,您可以直接访问所有内容而无需 -performBlock:。您在上下文所属的线程上,因此您遵循线程限制规则。

关于ios - Core Data 并发队列风格 MOC getters 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30875917/

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