我正在构建一个相当简单的 iOS 应用程序,当它启动时,会加载一些 View 并将它们堆叠在一起。
但是,我在应用程序启动和 View 出现之间遇到了很长的延迟。这些 View 并不复杂,只需很少的时间即可构建。
起初我以为可能是图片导致了延迟,因为我是通过 URL 抓取它的。但是在记录了一些检查点之后,图像加载发生得相当快。
我在构建 UIView 时做了类似的检查点日志记录,而且速度很快。
所以最后,我检查了在调用 .addSubview
和 View 实际出现之间是否有间隔,事实上是有间隔的。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
let returned = feedMngr.retrieveFeed()
if (returned) {
self.constructFeedStack()
self.view.addSubview(self.firstCardView!)
self.view.insertSubview(self.secondCardView!, belowSubview: self.firstCardView!)
self.view.insertSubview(self.thirdCardView!, belowSubview: self.secondCardView!)
self.view.insertSubview(self.fourthCardView!, belowSubview: self.thirdCardView!)
NSLog("fin")
}
}
记录“fin”后(应用启动后大约 5 秒),在实际呈现 View 之前会有 5-10 秒的延迟。
有人知道为什么会这样吗?
最佳答案
您正在修改主队列之外的 View 层次结构(“在后台”)。这是不允许的。您的 UIKit 调用都需要在主队列中。
关于ios - 从程序执行 .addSubview 到 View 实际出现的意外延迟 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35417355/