我注意到我的 uitableview 在执行 N^3 for 循环的 CPU 密集型 O 时不会响应用户交互。
是否有我应该知道的 dispatch_async 来让我的 for 循环和用户交互同时发生?
看来我要找的东西叫
QOS_CLASS_USER_INITIATED
通过http://www.raywenderlich.com/79149/grand-central-dispatch-tutorial-swift-part-1
最佳答案
作为基本规则,您应该:
- 仅在主线程上执行 UI 操作(例如设置 View 的背景颜色或更改标签的文本)。
- 在后台线程上执行长时间操作,例如密集循环。
默认情况下,您应用中的几乎所有内容都将发生在主 (UI) 线程上,除非您另有说明。您是正确的,因为您可以使用 dispatch_async
在后台线程上执行循环以释放主线程来处理 UI。例如,您可以(在 Swift 中):
// Process something large, jump to background thread:
dispatch_async(dispatch_get_global_queue(0, 0), {
// Long loop...
for var i = 0; i < 10000; ++i {
// ...
}
// When finished, jump back to main thread to update UI with results:
dispatch_async(dispatch_get_main_queue(), {
myLabel.text = "Finished processing!"
})
})
关于ios - Uitableview 不会滚动做循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32482046/