我正在使用iOS-Charts,我有一个ViewController,我在其中调用填充图表数据的函数。
目前我从ViewDidAppear调用它,但加载需要很长时间。哪个地方最好叫它?
答案 0 :(得分:1)
如果您在viewDidAppear
中加载了昂贵的加载代码,则在视图控制器完全在屏幕上之前它将无法运行。如果可能,您可能希望在viewDidLoad
中执行此操作,因为这是在视图控制器在屏幕上之前调用的。它也只会在视图控制器的初始设置期间调用一次,而如果您导航离开/返回此视图控制器,则可以多次调用viewDidAppear
。
对评论的回应
问题是你在主线程/队列上做了大量的工作。所以执行的线程到达你的viewDidLoad
然后一切都必须等待你的工作完成,然后你的函数才能退出并且你的视图控制器可以呈现。如果可能,您想要做的是在一个单独的队列中异步执行您的工作,然后在工作完成时更新主线程上的屏幕:
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.global(qos: DispatchQoS.QoSClass.userInitiated).async {
let results = someExpensiveOperation()
DispatchQueue.main.async {
updateViewWithResults(results)
}
}
}