gpt4 book ai didi

ios - 为什么不对所有 Core Data 操作使用私有(private)上下文?

转载 作者:行者123 更新时间:2023-11-29 02:41:48 25 4
gpt4 key购买 nike

在我的 iPhone 应用程序中,我在登录后通过 Core Data 插入大量数据。最初我在插入数据时显示加载程序,因此 UI 的阻塞不是问题,但现在我删除了加载程序并通过将 managedobjectcontext 并发类型更改为 NSPrivateQueueConcurrencyType 将所有插入操作移到后台线程上。用于某些插入,以减轻 UI 繁重的插入工作。

我想知道如果我使用相同的上下文而不是 NSMainQueueConcurrencyType 会有什么缺点?对于所有操作,是否推荐?

最佳答案

您应该为所有 上下文使用NSPrivateQueueConcurrencyType。例如,NSFetchedResultsController,只要您遵守使用队列限制的所有规则(即必须通过队列执行提取,以及错误等),就可以在私有(private)队列上下文中正常工作。 ). There is a bug with NSFetchedResultsController caching when using private queue contexts ,但缓存仅涵盖有限数量的用例。

如果/当您使用来自 Core Data 的数据来更新 UI 元素时,您仍然需要从主队列访问 UI。例如,这将访问属性以更新标签:

[[object managedObjectContext] performBlock:^{
NSString *text = [object someProperty];
[NSOperationQueue mainQueue] addOperationWithBlock:^{
[[self someLabel] setText:text];
}];
}];

使用专用队列限制有很多优点。缺点是您必须包含上述代码 - 这远远超过在主队列上执行核心数据工作。

关于ios - 为什么不对所有 Core Data 操作使用私有(private)上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25679433/

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