以下是有问题的代码:
override func viewDidAppear() {
super.viewDidAppear()
doit("dave")
}
作为一个背景知识,doit函数是一些代码,它将运行一段时间(天)。当我运行此代码时,应用程序会上下跳动一段时间,而在执行此操作时,doit函数中的print语句将开始打印到控制台。
但UI永远不会加载。应用程序图标停留在停靠栏中,但没有"打开点"我称之为。
如果我取出这个功能,一切都会很好。
我无法认为doit函数中的代码应该重要,因为视图应该在它甚至可以运行之前出现。我也在viewDidLayout和viewDidLoad中尝试了相同的结果。
为了好玩,我做到了:
override func viewDidLoad() {
super.viewDidLoad()
print(1)
// Do any additional setup after loading the view.
}
override func viewDidLayout() {
super.viewDidLayout()
print(2)
}
两个陈述都在没有出现视图的情况下打印。
感谢任何帮助。
答案 0 :(得分:0)
如果doit
运行了很长时间,那么您的问题是您正在阻止主线程。与UI相关的所有内容都会在那里发生,但它不会发生,因为您的doit
函数仍然很忙,并且UI必须等到它完成。您的用户界面无法显示,因为viewDidLoad
永远不会返回,并且必须才能返回其他主线程任务。
长时间运行的函数应放在其他线程上。 Apple提供了许多方法来实现这一目标。 GCD(即dispatch_async
和朋友)或NSOperation
可能是此的起点。