iphone - 你如何处理在 iOS 中获取数据的单独线程?

标签 iphone ios objective-c core-data

您好,我目前正在构建一个具有以下属性的应用程序:

  1. 使用核心数据进行存储
  2. 有一个一次显示一个项目的提要
  3. 如果没有项目,应用程序将异步调用从服务器获取

处理异步抓取已被证明是相当棘手的。

目前,我们将从服务器获取的项目直接存储到 Core Data 中。

每次应用程序需要一个新项目时,我们都会查询 Core Data 以查找未见过的项目。

由于这种对 Core Data 的持续查询,我们发现应用的性能受到了一些重大影响。

我们考虑过在内存中使用一个数组并为其保留一个索引,但事实证明,一旦我们没有项目,获取的异步方面太复杂了,因为我们必须使用锁和其他并发措施来保持数组线程安全.

你们对我如何减少对 Core Data 的总调用有什么建议吗?

最佳答案

您需要尽量减少访问持久性存储的次数,以便获取您希望显示的合理数量的项目。 Core Data 在故障托管对象方面非常有效,因此内存占用应该不是问题。

当您用完要显示的项目但数组中仍有一些剩余时,请尝试获取更多。

此时,如果您没有得到任何结果,则分派(dispatch)一个具有自己的托管对象上下文的异步队列,创建新的托管对象,保存并通知主上下文,以便它可以合并更改。

完成后,您将返回获取新项目。

关于iphone - 你如何处理在 iOS 中获取数据的单独线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15262371/

相关文章:

iphone - kCLLocationAccuracyThreeKilometers 是否使用 GPS 或手机信号塔?

ios - 如何在 ios 中为 TableView 单元格设置圆角半径

ios - viewDidAppear 在 applicationDidBecomeActive 之前调用

ios - 如何从我的 cocoapod 加载 xib 文件?

ios - iPad2 只给出错误的宽度和高度?

iphone - viewDidLoad 中的 NSURLRequest 使用缓存数据?

iphone - 显示模态视图 Controller 时设备旋转

ios - 如何在 Estimote 中显示 proximity id

ios - 无法订阅 pubnub channel (错误 107)

iOS locationManager - 汽车仪表延迟