gpt4 book ai didi

swift - UI 未加载,代码仍在运行

转载 作者:行者123 更新时间:2023-11-30 13:51:34 24 4
gpt4 key购买 nike

下面是有问题的代码:

override func viewDidAppear() {
super.viewDidAppear()
doit("dave")
}

作为一点背景知识,doit 函数是一些将运行很长时间(天)的代码。当我运行此代码时,应用程序会上下弹跳一段时间,在执行此操作时,doit 函数中的打印语句开始打印到控制台。

但是用户界面永远不会加载。应用程序图标保留在扩展坞中,但没有我所说的“空心点”。

如果我删除该功能,一切都会呈现良好。

我不认为 doit 函数中的代码应该重要,因为 View 应该在它运行之前出现。我还在 viewDidLayout 和 viewDidLoad 中尝试过,结果相同。

为了好玩,我这样做了:

override func viewDidLoad() {
super.viewDidLoad()
print(1)


// Do any additional setup after loading the view.
}

override func viewDidLayout() {
super.viewDidLayout()
print(2)
}

这两个语句都在 View 未出现的情况下打印。

感谢任何帮助。

最佳答案

如果 doit 运行很长时间,则问题在于您阻塞了主线程。所有与 UI 相关的事情都发生在那里,但它不会发生,因为您的 doit 函数仍然很忙,并且 UI 必须等待它完成。您的 UI 不会出现,因为 viewDidLoad 永远不会返回,并且它必须返回才能发生其他主线程任务。

长时间运行的函数应该放在其他线程上。 Apple 提供了多种方法来做到这一点。 GCD(即 dispatch_async 和 friend )或 NSOperation 可能是这个的起点。

关于swift - UI 未加载,代码仍在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34217280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com