在哪里调用函数 Fill Chart Array 以减少加载时间?
Where to call function Fill Chart Array to reduce loading time?
我正在使用 iOS-Charts,我有一个 ViewController,我在其中调用填充图表数据的函数。
目前我是从ViewDidAppear调用的,但是加载时间很长。在哪里调用它最好?
如果您将昂贵的加载代码放在 viewDidAppear
中,它不会 运行 直到您的视图控制器完全显示在屏幕上。如果可能,您可能希望在 viewDidLoad
中执行此操作,因为这是在您的视图控制器出现在屏幕上之前调用的。它也只会在视图控制器的初始设置期间被调用一次,而如果您离开/返回此视图控制器,viewDidAppear
可以被调用多次。
回复评论
问题是您在主线程/队列上进行了昂贵的工作。所以执行线程到达你的 viewDidLoad
然后一切都必须等待你的工作完成才能退出你的函数并且你的视图控制器可以被呈现。如果可能的话,你想做的是在一个单独的队列上异步执行你的工作,然后在工作完成后在主线程上更新你的屏幕:
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.global(qos: DispatchQoS.QoSClass.userInitiated).async {
let results = someExpensiveOperation()
DispatchQueue.main.async {
updateViewWithResults(results)
}
}
}
我正在使用 iOS-Charts,我有一个 ViewController,我在其中调用填充图表数据的函数。
目前我是从ViewDidAppear调用的,但是加载时间很长。在哪里调用它最好?
如果您将昂贵的加载代码放在 viewDidAppear
中,它不会 运行 直到您的视图控制器完全显示在屏幕上。如果可能,您可能希望在 viewDidLoad
中执行此操作,因为这是在您的视图控制器出现在屏幕上之前调用的。它也只会在视图控制器的初始设置期间被调用一次,而如果您离开/返回此视图控制器,viewDidAppear
可以被调用多次。
回复评论
问题是您在主线程/队列上进行了昂贵的工作。所以执行线程到达你的 viewDidLoad
然后一切都必须等待你的工作完成才能退出你的函数并且你的视图控制器可以被呈现。如果可能的话,你想做的是在一个单独的队列上异步执行你的工作,然后在工作完成后在主线程上更新你的屏幕:
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.global(qos: DispatchQoS.QoSClass.userInitiated).async {
let results = someExpensiveOperation()
DispatchQueue.main.async {
updateViewWithResults(results)
}
}
}