如何实例化和加载一个视图控制器,然后继续使用swift

当我从viewController A到viewController B时,我遇到了一个问题,在它继续之前它有大约5秒的延迟。 我相信这是由于我在viewDidLoad中加载的视图的数量。

我有一个xib文件,它有11个代表层次的部分。 每个部分都有一个button和一些可以根据用户进度改变的图像。

另外,我实例化了10个这样的xib视图来加载一个滚动视图。 这一切都发生在viewDidLoad。

我想知道如果我可以加载viewController B,并准备好去实际点击继续button之前, 希望能够解决我得到的延迟。 我也使用自定义赛格来往和从控制器。

任何帮助,我可以得到赞赏。 我已经自己研究过这个,但是我发现的大部分话题都是过时的,或者不适用。 再次感谢任何指针。

更新:答案确实回答了我的问题的一部分至于如何准备一个视图控制器的效率的目的,它不回答延迟部分,但我想我想通了,如果您阅读下面的评论答案…

你可以将viewDidLoad()所有繁重的代码移动到一些自定义的方法中

 func prepare() { // Something hard } 

比你可以在任何时候准备你的控制器,并存储它

 var heavyController: HeavyViewController? override func viewDidLoad() { super.viewDidLoad() heavyController = HeavyViewController() heavyController?.prepare() } 

而不是在segue中使用heavyController而不是创build新的。 希望这可以帮助。

PS考虑把大量的代码移动到后台线程中,你可以查看这个例子 。

更新:显示你准备好的控制器使用segue做这样的事情:

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "HeavyController" { present(heavyController, animated: true, completion: nil) } }