我有一个带标签的iOS应用程序,每个选项卡都有某种json请求,因此视图加载速度稍慢。我想彻底删除这个延迟,所以我想知道是否有办法在应用程序的登录阶段从每个类调用ViewDidLoad
函数。
if (login == "Success") {
UserDefaults.standard.set(true, forKey: "isUserLoggedIn");
UserDefaults.standard.synchronize();
DispatchQueue.main.async {
// Load all resources here
}
}
我可以理解,如果应用程序非常大,这可能是不好的做法,但我认为在这种情况下应用程序并不大,但视图控制器之间的延迟足以令人讨厌。我宁愿让用户在开始时等待3-5秒,同时加载一切,并且一旦进入内部就能获得流畅的体验。有没有办法做到这一点?
答案 0 :(得分:0)
您不应该为自己调用viewcontroller的生命周期函数。加载视图时将调用viewDidLoad函数。
Apple:在视图控制器将其视图层次结构加载到内存后调用此方法。
因此调用let _ = viewController.view
将触发视图创建和此函数的调用。
但我觉得改为启动阶段要好得多。考虑一下“启动”屏幕,它可以下载您需要的所有内容(可能包含微调器和文本),并在完成后自动移动到内容(标签栏控制器)。这也可以解决网络连接不足的问题(例如,考虑下载需要花费一分钟的时间)。您可以在tabbbar控制器之前的模式上方或屏幕上显示该屏幕。
如果你不喜欢创业阶段的想法,你也可以设计你的ui响应。在需要时/定期开始下载,并在准备好后根据结果更新您的UI。那时ui会快,但使用最后已知的数据。意义和实施取决于您的内容。
<强>更新强>
第二个想法:如果您已经有服务器登录屏幕,为什么不在成功下载后直接下载内容作为登录的一部分?用户不知道您是否仍在检查登录或下载一些必要的数据。您可以说只有在成功完成服务器登录和下载后才能成功登录。