gpt4 book ai didi

iphone - Core Data client+server/后台保存/一般导入问题

转载 作者:行者123 更新时间:2023-11-28 23:19:07 24 4
gpt4 key购买 nike

我正在开发一个基于核心数据的应用程序,它有一个 Mac 应用程序作为“服务器”,一个 iPhone 作为客户端。一切都进行得很顺利,除了我遇到了性能问题。

当用户点击一个对象时,服务器必须返回一些与该对象相关的对象(不要太重,通常是 3-4 个对象)并显示一个 UI 以选择一些选项。这需要尽可能快。到服务器的往返时间、服务器拉取数据、格式化数据、将数据返回给客户端以及客户端从数据创建 NSManagedObjects(无法进一步优化)的时间约为 200 毫秒。与呈现 UI 相关的代码(再次无法进一步优化)需要大约 150 毫秒。在运行 iOS 4.0 的 iPod touch 2G 上,在导入对象后保存托管对象上下文的单行代码需要 150-200 毫秒。

对我来说,这尖叫着我应该在后台管理对象上下文保存。但是,据我了解,这并不能真正满足我的需求。如果我想在后台线程上保存托管对象上下文,那么其中的所有对象都必须在单独的托管对象上下文中的后台线程上创建,所以我不会看到任何速度增益,因为它仍然需要 100 -200 毫秒进行保存,我会看到更多的开销,因为在我的 View Controller 发现它需要之前,我仍然需要告诉我的主线程从后台托管对象上下文的保存中更新它的托管对象刷新自己。

我是否缺少明显的解决方案?在这种情况下,我可以使用有关 Core Data 的东西吗?我不想在那里抛出这样一个普遍的问题,但我完全不知道从这里去哪里。

最佳答案

听起来您需要将整个服务器通信移至后台线程。如果你这样做了,那么无论与服务器的通信花费多长时间,整个 UI 都会响应。

为此,您在连接到同一个 NSPersistentStoreCoordinator 的后台线程上建立第二个 NSManagedObjectContext。然后在该后台线程上执行服务器通信(使用 NSOperation 甚至可能有意义)并保存更改。

你的主线程和主 NSManagedObjectContext 监听保存通知,当它收到通知时,它会更新主线程和 UI。这将消除您看到的任何卡住,处理时间几乎变得无关紧要。

关于iphone - Core Data client+server/后台保存/一般导入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3124200/

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