在主ui线程中加载Realm对象是否可以接受?

时间:2016-08-27 18:18:45

标签: ios multithreading realm

我们在我们的iOS应用程序中采用(Swift)Realm作为数据存储,到目前为止我们对它非常满意。我们对使用Realm和多线程检索和存储对象的设计提出了一个问题:

在主ui线程中加载对象是否可以接受?

  • 我们知道在线程之间无法共享加载了realm的对象的约束。
  • 我们还没有看到任何性能问题,但到目前为止我们的方法是在后台线程中加载各种资源。
  • 在我们加载和过滤一些数据并注册通知块的情况下,我们没有看到使用主ui线程的问题,但我们如何处理一种情况,例如我们要显示所有表视图中的数据?

1 个答案:

答案 0 :(得分:1)

  

在主ui线程中加载对象是否可以接受?

是的,在大多数情况下*可接受且足够快。如果从数据库中读取会阻止用户,那是不可接受的,但由于没有像故障这样的概念,因此读访问总是可以快速预测。 只有当你有一个非常复杂的对象图,你需要做大量的预处理才能在UI上显示对象时,使用后台线程和/或缓存来保证良好的用户体验是有意义的。

  

在我们加载和过滤一些数据并注册通知块的情况下,我们看不到使用主ui线程的问题,但我们如何处理一种情况,例如我们要显示所有数据表格视图?

UITableView仅请求当前在屏幕上可见的单元格并重新使用视图容器。 Realm集合在这种懒惰的特性中是相似的,当你不对它进行过滤时,它不会增加内存压力,因为你只能获得那些你从它中取出的对象的对象访问器。只要您依赖内置的Realm ResultsList集合,就不需要分页。只有当您需要以Realm不支持的方式应用自定义和复杂过滤器时,才有必要在后台线程上处理它。

相关问题