gpt4 book ai didi

objective-c - NSPrivateQueueConcurrencyType 上下文只能在performBlock 内操作?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:49:30 24 4
gpt4 key购买 nike

我想知道 NSPrivateQueueConcurrencyType 上下文是否仅在 -performBlock 和 -performBlockAndWait 中运行。和从 NSPrivateQueueConcurrencyType 上下文返回的 NSManagedObject 无法在 performBlock 之外访问?

我从苹果文档“What's new in iOS 5.0”中找到了下面这句话

When sending messages to a context created with a queue association, you must use the performBlock: or performBlockAndWait: method if your code is not already executing on that queue (for the main queue type) or within the scope of a performBlock... invocation (for the private queue type). Within the blocks passed to those methods, you can use the methods of NSManagedObjectContext freely.

如果是,为什么 MagicalRecord 和 XMPPFramework 不在 block 内操作上下文和 NSManagedObject?

最佳答案

我不知道 MagicalRecord 和 XMPPFramework 中的代码做什么或不做什么。您需要通过他们的正常支持方式与他们联系。

但是,我可以告诉您,如果您使用 NSPrivateQueueConcurrencyType 创建 MOC,那么访问该 MOC 或该 MOC 拥有的托管对象的唯一方法是通过 performBlock* API。

如果您使用 NSMainQueueConcurrencyType 创建一个 MOC,那么您可以在主线程中运行或通过 performBlock* API 访问它。

如果您使用 NSConfinementConcurrencyType 创建 MOC,则您只能从创建 MOC 的线程访问 MOC。如果未指定并发,则默认使用限制。

这些是当前创建 MOC 的唯一方法,以及它们的使用规则摘要。

我相信 MagicalRecord 使用限制并为每个线程保留一个 MOC,但我从未使用过它,并且只查看了旧版本的代码库,因此随着嵌套上下文的出现,它可能会发生很大变化。

关于objective-c - NSPrivateQueueConcurrencyType 上下文只能在performBlock 内操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11436358/

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