【问题标题】:Unintentional lag from when program executes .addSubview to when view actually appears- Swift从程序执行 .addSubview 到视图实际出现时的无意延迟 - Swift
【发布时间】:2016-02-15 19:18:11
【问题描述】:

我正在构建一个相当简单的 iOS 应用程序,它在启动时会加载一些视图并将它们堆叠在一起。

但是,我在应用程序启动和视图出现之间经历了很长的延迟。这些视图并不复杂,构建时间也很短。

起初我认为这可能是导致延迟的图像,因为我通过 URL 获取了它。但是在记录一些检查点之后,图像加载发生得相当快。

我在构建 UIView 时进行了类似的检查点日志记录,而且速度很快。

所以最后,我检查了在调用.addSubview 和视图实际出现之间是否存在差距,实际上是存在的。

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 秒),实际呈现视图之前会有 5-10 秒的延迟。

有人知道为什么会这样吗?

【问题讨论】:

    标签: ios iphone swift uiview


    【解决方案1】:

    您正在修改主队列之外的视图层次结构(“在后台”)。这是不允许的。您的 UIKit 调用都需要在主队列中。

    【讨论】:

    • 啊,我认为做到了。谢谢!
    • Rob 打败了我。供将来参考的注意事项:当您的 UI 代码需要永远渲染到屏幕上、行为异常或在不应该的情况下崩溃时,通常意味着您正在尝试从后台线程操作 UIKit 对象。这就是我希望根据您的问题找到的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    相关资源
    最近更新 更多