ios - 从程序执行 .addSubview 到 View 实际出现的意外延迟 - Swift

标签 ios iphone swift uiview

我正在构建一个相当简单的 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/

相关文章:

iphone - UIWebView 加载但不显示网站(XCode 4,iOS SDK 4.3)

ios - Xcode10运行模拟器警告启动失败

iphone - 如何在 iOS 5 的通知中心获取我的应用程序的所有通知

ios - 如何创建左/右音频平衡 slider 并让画外音读出自定义值?

xcode - Xcode 调用中缺少参数 'Coder' 的参数

swift - 如何获取以编程方式设置的 UIImageView 的名称?

ios - 是否可以通过编程方式阻止特定的 iOS 应用程序在越狱的 ipad/iphone 上运行?

ios - 为什么文件的创建时间戳因设备不同而不同?

ios - ios设备之间的同步

iphone - 服务器与 iPhone Ping