ios - 在应用程序启动时预加载 ViewController

标签 ios swift uiviewcontroller

我有一个沉重的UIViewController,它在viewDidLoad中加载多个图像(因此仅在第一个 Controller 访问时调用一次)。 加载需要 5-10 秒,我想减少这个时间,在应用程序启动时从某个地方预加载它。

我已经完成了研究,并尝试访问 Controller 的 view 属性,以便将其加载到 AppDelegatedidFinishLaunchingWithOptions 方法中,并且它实际上做到了(viewDidLoad 被调用),但是当我一个 Controller 本身时,viewDidLoad 被再次调用,所有图像也被再次加载。

当前代码示例如下:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewController(withIdentifier: "modeDescriptionViewController")
    let _ = vc.view  // viewDidLoad is called here

    return true
}

如何预加载一个巨大的 UIViewController 以便在打开时不需要加载太多内容?它保存的数据是完全静态的,因此任何解决方案都适用。

最佳答案

我建议从 Controller 中提取所有加载逻辑。创建一个 DataLoader 类(或结构)来执行加载并存储加载的数据。

在 AppDelegate 中实例化一个 DataLoader 并指示它加载数据,与 View Controller 分离。然后将此实例传递给 Controller ​​,以便 Controller 可以访问加载器中的数据。

您可能需要实现一些状态跟踪,以确保当您向加载器请求数据时,它将开始加载,或者如果加载已经在进行中,则等待。

还有一个好处,您还可以在后台队列中实现加载,这样就不会阻塞 UI。

关于ios - 在应用程序启动时预加载 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54467493/

相关文章:

ios - IOS (Swift) 中的单元测试 BLE 应用程序

ios - 如何使用 Swift 向此白色和 14px 的 iOS 条形图添加值?

ios - NSInternalInconsistencyException : There can only be one UIApplication instance

ios - 代码 : sharing content via Action Sheet

iphone - iOS 上的 Google Analytics(分析)事件和社交报告

ios - 单例中的@Published 属性在第一个事件之后不发出事件

ios - 从单个 TableView 实例化多个 View Controller

ios - 如何快速更新实例变量?

xcode - Swift、Modal Segue 和 ViewController 问题

ios - CollectionView 上的最后一个单元格无法在 Swift 中看到