菜鸟教程小白 发表于 2022-12-13 15:01:40

ios - 前台和后台线程的不同 ManagedObjectContexts


                                            <p><p>我是 iOS 开发新手。我正在编写一个允许用户读取/写入核心数据记录的 iOS 应用程序。这些记录将通过 http 同步到服务器。我有一组在执行同步的后台线程中运行的链式(串行)NSOperations。</p>

<p>用户可以在同步我们运行的同时读/写。我的计划是在应用程序中使用两个 managedObjectContexts(都使用相同的 persistentStoreCoordinator),一个用于前台,一个用于后台。</p>

<p>我的 NSOperations 创建的所有后台线程都将串行运行,并将使用后台 MOC。所有基于 UI 的东西都将使用前台 MOC。</p>

<p>我的问题是:这是可接受的 iOS 核心数据模式吗?我可以愉快地在这两个 MOC 中对同一个模型数据库进行读/写操作,而不必担心锁定和并发问题吗?</p>

<p>非常感谢。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这是一种常见的核心数据模式,框架旨在适应这种模式。</p>

<p>如果您自己管理线程,则需要使用一种称为“线程限制”的技术,您可以在标题为“与核心数据的并发”部分的文档中阅读有关它的更多信息。 </p>

<p>除了线程限制之外,iOS 5.0 中还有一些新功能旨在帮助管理并发。 <code>NSManagedObjectContext</code> 现在可以使用 <code>NSManagedObjectContextConcurrencyType</code> 进行配置。您可以在 <code>NSMainQueueConcurrencyType</code> 和 <code>NSPrivateQueueConcurrencyType</code> 之间进行选择。 </p>

<p>带有 <code>NSMainQueueConcurrencyType</code> 的上下文在主线程上运行,可用于为 UI 提供服务。 <code>NSPrivateQueueConcurrencyType</code> 的上下文用于后台任务。 </p>

<p>要使用私有(private)上下文,您可以通过 <code>performBlock:</code> 和 <code>performBlockAndWait:</code> 方法与之交互,以确保您的代码在正确的线程上执行。要使用主队列上下文,您可以正常与它进行交互,或者如果您的代码不在主线程上运行,则使用 block 方法。</p>

<p>这些新功能在文档中没有详细讨论,在“iOS v5.0 的核心数据发行说明”部分中有一些信息。然而,WWDC 2012session 视频中有更深入的讨论:“Session 214 - Core Data Best Practices”。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 前台和后台线程的不同 ManagedObjectContexts,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/11580421/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/11580421/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 前台和后台线程的不同 ManagedObjectContexts