gpt4 book ai didi

swift - 快速使用DispatchWorkItem有什么好处?

转载 作者:行者123 更新时间:2023-12-03 15:59:50 29 4
gpt4 key购买 nike

假设我们有以下代码定义了一个连续循环(例如在游戏中):

let queue = DispatchQueue(label: "DemoSerialQueue")
let workItem = DispatchWorkItem{ print("Hello World") }
func gameLoop() {
queue.async(execute:workItem)
}

上面的代码在速度方面是否会比以下代码更有效:
func gameLoop() {
queue.async{ print("Hello World") }
}

特别是,我想知道第二种形式是否会在每个循环上分配一个闭包,从而导致性能下降。

最佳答案

DispatchWorkItem类是对工作项概念的封装。没有什么好处。

A dispatch work item has a cancel flag. If it is cancelled before running, the dispatch queue won’t execute it and will skip it. If it is cancelled during its execution, the cancel property return True. In that case, we can abort the execution



通过将我们的请求代码封装在一个工作项中,我们可以很轻松地在每次将其替换为新的请求项时将其取消,如下所示:
class SearchViewController: UIViewController, UISearchBarDelegate {
// We keep track of the pending work item as a property
private var pendingRequestWorkItem: DispatchWorkItem?

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
// Cancel the currently pending item
pendingRequestWorkItem?.cancel()

// Wrap our request in a work item
let requestWorkItem = DispatchWorkItem { [weak self] in
self?.resultsLoader.loadResults(forQuery: searchText)
}

// Save the new work item and execute it after 250 ms
pendingRequestWorkItem = requestWorkItem
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(250),
execute: requestWorkItem)
}
}

通常,Dispatch函数可以将 的DispatchWorkItem 作为参数。因此,在两种情况下我们都使用 时,不会对性能造成任何影响。使用最适合您的一种。

关于swift - 快速使用DispatchWorkItem有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54058634/

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