DispatchWorkItem类是对工作项概念的封装。几乎没有什么好处。
调度工作项具有取消标志。如果之前取消
在运行时,调度队列不会执行它并跳过它。如果它
在执行期间被取消,Cancel属性返回true。在
那样的话,我们可以中止执行
通过将我们的请求代码封装在工作项中,我们可以很容易地在被新的请求代码替换时取消它,如下所示:
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)
}
}
通常,调度功能可以
一个街区
或
DispatchWorkItem
作为参数。所以在我们使用时不会有任何性能问题
两种情况下的块
. 用最适合你的。