ios - 在保留任何下载数据的同时在多个 View Controller 之间切换的最佳方法?

标签 ios swift

拥有多个 UIViewController 的最佳方法是什么,这些 UIViewController 可以从侧面菜单访问,而无需每次显示 View Controller 时重新下载任何数据?

例如,我有三个 View Controller ,一个是显示最近通知的主页,一个是显示最近文章的新闻页面,一个是包含图像集合的页面。加载每个 View Controller 时,将从远程服务器下载数据并显示 - 如果用户切换到另一个 View Controller 并再次返回,我希望立即显示先前下载的数据,而不必重新下载(直到 UIRefreshControl 被加载)使用或类似)。

在我的脑海中,我可以通过四种方式实现这一目标:

  1. 将数据存储在单例中,如果之前已下载过数据,则从中加载数据,但是,这似乎违背了我所见过的一般做法,而且似乎效率不高 - 特别是如果有很多数据和/或多 View Controller 。
  2. 使用基于侧边菜单而不是传统底部栏选择索引的 UITabBarController,如果侧边菜单上有 10-12 个项目,这会导致问题吗?
  3. 将数据缓存到磁盘(使用 NSCache 等)并根据需要实例化/解除每个 View Controller , View Controller 可以使用缓存的数据 - 内存中一次只有一个 View Controller 。
  4. 使用某种自定义的容器 View 来缓存 View Controller 并在需要时加载它们,感觉有点老套而且效率不高?

实现这一目标的最佳方法是什么?我看到的大多数教程只是展示如何连接/呈现 View Controller ,但我一直在努力寻找任何解释如何保留下载到它们上的数据的内容。

最佳答案

仅供引用。如果您的 ViewController 之一应该“显示最近的通知/文章”,那么缓存数据将不起作用,因为它可能不是最新的,除非您每次都从服务器拉取。 (除非最近的内容被推送,即使这样,如果您不每次都拉取,您也可能会遇到巨大的同步问题。)

也就是说,选项 1 和选项 3 实际上是相同的,唯一的区别在于保存信息的位置。

您不应该使用标签栏 Controller 。如果您无法使用 UISplitViewController 那么您应该制作自己的自定义容器 View Controller 。

至于缓存问题。我将为每个端点实现某种缓存机制。它可以存储在内存中或磁盘上,但我认为内存中更好,因为数据听起来相当不稳定。

设置它,以便当 View Controller 进行“网络”调用时,它使用的函数使用它提取的最后一个数据调用闭包,然后可以选择再次进行网络调用并使用新数据。这样,风险投资家将能够快速响应尽快获取数据,并且仍然会在出现的每个 View 中提取新数据。

关于ios - 在保留任何下载数据的同时在多个 View Controller 之间切换的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51825537/

相关文章:

ios - 从内部推送的 ViewController 中关闭 Modal NavigationController

ios - 如何限制同一张照片在 iOS 的自定义相册中再次添加?

ios - 如何在iOS中使用RMStore获取自动续订订阅的通知

ios - CAGradient 使用 UIColor 数组

cocoa - 将核心数据实体绑定(bind)到 NSTableView : Model Key not working

ios - 随着 View 的变化实时更新状态栏文本颜色

ios - 使用 UITableView 单元格作为 UIView 并通过点击它来永久更改它的颜色(颜色源来自生成随机颜色的函数)

ios - Swift 编译时可用性 : non-available case

php - Swift 2,解析 JSON,空响应

ios - 定义 UIViewController 或 UIView 的自定义框架