gpt4 book ai didi

ios - 核心数据堆栈 : This Apple provided example adds the Persistent Store Coordinator to the stack asynchronously. 为什么?

转载 作者:可可西里 更新时间:2023-11-01 00:59:45 24 4
gpt4 key购买 nike

我非常习惯于同步创建核心数据堆栈。但是,我只是注意到 Apple 提供的这个示例并没有这样做,而是在 background 线程上添加了持久存储协调器。

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/InitializingtheCoreDataStack.html

  1. 为什么?
  2. 有什么后果?
  3. 这种方法能否“有效”地替代同步核心数据堆栈设置?

最佳答案

如果您正在进行迁移或与 iCloud 交互,则对 addPersistentStoreWithType... 的调用可以阻塞。因此,将其放入后台队列更安全,这样就没有阻塞 UI 线程的风险。

此外,由于 applicationDidFinishLaunching 处于滴答作响的时钟状态,您不希望冒着阻塞该方法的时间超过必要时间的风险。由于示例核心数据堆栈是通过该方法创建的,因此最好确保它尽快返回。

更新

Any chance of adding how to handle this to your answer - i.e. how should the asynchronous addition be handled, any best practices? I'm guessing that fetched results controllers would update once the store coordinator is added, so showing some sort of 'loading' status in the UI until then may be best. It seems like a little too much for smaller projects though... would everything 'just work' without any code to handle the background setup? e.g. do fetches block until the coordinator is added?

一般来说,您的 addPersistentStore 调用将在任何 NSFetchedResultsController 命中它之前很久就完成。如果 addPersistentStore 确实在 NSFetchedResultsController 触发后以某种方式进入,那么您将需要执行第二个 performFetch:,因为 Core Data 不会触发任何内部该操作完成时的通知。

就个人而言,在后台队列中,我将在 addPersistentStore 完成时执行一个 completionBlock/closure 或触发一个 NSNotification。但我只是在 之后 补充说,我在测试期间发现了一个问题。否则它只是预优化。

关于ios - 核心数据堆栈 : This Apple provided example adds the Persistent Store Coordinator to the stack asynchronously. 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36526196/

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