我正在建立一个基于领域数据库的应用程序。我有一个带有5个UITableViews的概览屏幕,这些视图都是由一个结果和一个NotificationToken共同驱动的。总共,我有5个结果和5个notificationtoken(每个都有不同的对象)。
此概览屏幕显示在UITabBarController的第二个选项卡中。当我第一次运行应用程序并选择overview选项卡时,需要很长时间才能显示该选项卡(~1)。
在加载结果时,如何加快加载时间或保持UI响应?
结果加载其对象类型的所有实体。所有这些都按“名称”密钥路径排序。

最佳答案

在加载结果时,如何加快加载时间或保持UI响应?
那要看时间花在哪里了。
一。大型领域文件
如果领域文件很大,内存映射可能是一个计算开销很大的操作。如果是这种情况,可以使用Realm.asyncOpen(...)在后台队列上异步打开文件,在给定的回调队列(例如主队列)上传递打开的域。
2。大量对象
如果你有大量的对象,也许你可以重新构造你的数据模型来减少这个数量?
例如,假设您的模型上有一个isDeletedboolean属性,并且您在稍后应用程序具有连接时在RESTful web API中手动同步这些删除操作。与保留所有这些对象不同,您可以有一个新的模型(例如WebOperation),其中只包含执行该操作所需的信息,而不是完整的对象(例如{operation: 'delete', id: '1234'})。
三。计算开销大的查询
如果查询中的任何一个(或所有)计算开销很大,则可以在后台线程上异步执行它们。通过将通知块添加到领域集合(例如aResults),如果您不同步访问Results,通知块将在后台运行查询,仅当对查询求值后才在原始线程上传递Results通知中的.initial,从而将查询操作卸载到后台线程,从而释放打开你的UI线程。
四。欠优化查询
有些查询比其他查询快。尝试使用不同的方法来构造查询、测量和比较结果。选择最有效的变体。

关于ios - 带UITableView的iOS Swift 5 Realm结果阻止了UI,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44267911/

10-11 22:26
查看更多