我有一个沉重的UIViewController
,它在viewDidLoad
中加载多个图像(因此仅在第一个 Controller 访问时调用一次)。
加载需要 5-10 秒,我想减少这个时间,在应用程序启动时从某个地方预加载它。
我已经完成了研究,并尝试访问 Controller 的 view
属性,以便将其加载到 AppDelegate
的 didFinishLaunchingWithOptions
方法中,并且它实际上做到了(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/