在iOS中如何处理分离的线程获取数据?

5

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

  1. 使用Core Data进行存储
  2. 具有显示一项内容的动态源
  3. 如果没有内容,应用将异步调用服务器获取内容

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

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

每次应用程序需要新内容时,我们都会查询Core Data以获取未看过的内容。

由于这种对Core Data的不断查询,我们发现应用程序的性能受到了一定的影响。

我们考虑使用内存中的数组并保留其索引,但一旦我们缺少内容,异步获取的方面就变得太复杂了,因为我们必须使用锁和其他并发措施来保持数组线程安全。

您们有什么建议可以减少对Core Data的总调用次数吗?


2
你是否对应用程序进行了分析,并确认获取数据的速度较慢? - Rey Gonzales
2
你正在使用哪种并发类型? - mattyohe
1
性能问题的症状是什么?CoreData在其MOC中具有自己的缓存系统。 - Jeremy
1
我会在主线程(或另一个线程,但始终在同一线程上)上使用 GCD 队列来访问数组。这样可以使你在不使用锁的情况下获得线程安全的访问数组,避免了额外的开销和麻烦。 - Rich Schonthal
1个回答

0
你需要尽量减少对持久存储的访问次数,只获取你预期要显示的合理数量的项目。Core Data能够很有效地处理受管理对象的错误,因此内存占用不应是问题。
当你的展示项即将用完但数组中仍有剩余项时,请尝试获取更多数据。
在这一点上,如果您没有得到结果,请使用自己的托管对象上下文调度异步队列,创建新的托管对象,保存并通知主上下文以便它可以合并更改。
完成后,您可以再次开始获取新项目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接