在swift

时间:2016-09-02 18:59:11

标签: realm nsoperation nsoperationqueue

我正在学习如何使用NSOperation,NSOperationQueue进行网络通话,以便在我的应用中提供响应更快的用户界面'表格视图。

网络操作的结果存储到领域并显示在表视图中。

这是一个无限滚动表视图,当用户结束时,更多数据会被拉入应用程序。

我想知道在这里使用什么是最好的设计范例,哪里是清除这个领域的最佳位置。我不想用无用的数据来夸大应用程序。如果他们在没有网络(飞行模式)的情况下重新登录,我只希望他们拥有数据。

我也想知道触发这些网络操作的最佳位置在哪里?也许是cellForRowAtIndexPath?我不确定,因为我通常只使用Alamofire并在viewDidLoad中触发网络请求。但这些不是可取消的电话。

我已经浏览了关于ray wenderlich的精彩教程,但除了操场示例之外,我还没有得到真实世界的应用教程。如果有人知道关于这个主题的好话,请告诉我

感谢

1 个答案:

答案 0 :(得分:1)

这可能很难回答,因为这完全取决于您的应用,它显示的数据的大小/类型以及您想要执行网络提取的频率。最终,它很可能是在“感觉良好”和“感觉良好”之间做出妥协。以及为实现这一目标需要消耗多少系统资源。

在这种特殊情况下,Realm被用作缓存机制,仅此而来,所以何时清除它应该取决于你希望清除它的积极程度。

如果我正在构建这样的系统,我将决定一系列我最想要的最新项目,并将它们保存在Realm中。如果用户随后决定开始向下滚动超出该限制,则会下载更多数据并将其附加到Realm数据库中。最终用户会感到疲倦并滚动回到顶部(或者他们甚至可能只是退出应用程序并从顶部重新启动)。此时,触发操作以查看Realm缓存的大小并删除尽可能多的项目以使其恢复到所需大小是合适的。如果他们再次开始向下滚动,则只需重新下载该数据即可。

与将项目复制到内存中的SQLite不同,Realm非常擅长从磁盘映射的延迟加载资源,因此不必担心内存中Realm项目的数量,更多的是磁盘上的Realm文件,这又取决于您下载的数据有多大。

至于何时触发另一个网络操作以请求更多数据,最好在tableView(_:willDisplay:forRowAt:)中执行此操作。根据要下载的数据的大小(以及表格单元格的大小),您应该使用它,直到以相当正常的速度滚动时感觉自然。作为一个起点,我建议在点击滚动视图的底部之前,从可能是整个屏幕的表格单元格开始。

祝你好运!