【问题标题】:How to pass RLMObject between thread in iOS?如何在 iOS 中的线程之间传递 RLMObject?
【发布时间】:2015-06-06 20:50:41
【问题描述】:

我有一个包含 10000 个 RLMObjects 的 RLMArray,可以根据按钮触摸事件的属性对其进行排序。

我想通过 GCD 将排序过程退回到后台线程并保持 UI 流畅。 Realm 不是线程安全的,因此一旦我将更新的 RLMArray 传递回主线程,它就会崩溃。

执行此操作的最佳方法是什么?谢谢

【问题讨论】:

  • 用一些相关代码更新您的问题,指出哪一行崩溃,并提供有关崩溃的详细信息。
  • 为什么要自己进行排序,而不是从 Realm 用不同的 sortBy 属性再次获取它们?
  • 通过使用不同的 sortBy 属性重新获取领域对象仍然有一个小的延迟。根据记录,我们有超过 50,000 个 RLMObject。

标签: ios objective-c multithreading grand-central-dispatch realm


【解决方案1】:

是的,没错。领域对象不是线程安全的。如果您需要在线程之间移动它们,最简单的方法是给每个对象一个主键,然后使用其主键在新线程上重新获取该对象(使用[RLMObject objectForPrimaryKey:] 方法)。

在这种情况下,最好执行排序,然后使用结果构建对象主键的NSArray。然后,您可以将此数组传递给新线程,然后根据需要从其中重新获取对象。

值得庆幸的是,在 Realm 中重新获取对象的速度非常快,因此虽然这看起来效率很低,但您不应该遇到任何重大的性能损失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多