gpt4 book ai didi

ios - 我是否需要在完成 block 中使用 dispatch_get_main_queue

转载 作者:搜寻专家 更新时间:2023-11-01 07:20:32 32 4
gpt4 key购买 nike

tutorial from Ray Wenderlich Series, 之一中他在完成 block 中使用了 dispatch_get_main_queue() 如下

func startFiltrationForRecord(photoDetails: PhotoRecord, indexPath: NSIndexPath){
if let filterOperation = pendingOperations.filtrationsInProgress[indexPath]{
return
}

let filterer = ImageFiltration(photoRecord: photoDetails)
filterer.completionBlock = {
if filterer.cancelled {
return
}
dispatch_async(dispatch_get_main_queue(), {
self.pendingOperations.filtrationsInProgress.removeValueForKey(indexPath)
self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
})
}
pendingOperations.filtrationsInProgress[indexPath] = filterer
pendingOperations.filtrationQueue.addOperation(filterer)
}

尽管他简单地解释了为什么需要完成 block ,但我想知道是否有人可以回答以下问题

在我自己的应用程序中,我在很多地方都有完成 block (像他一样在完成 block 中重新加载 TableView 代码。但是,我没有一个 dispatch_get_main_queue 代码。这是否意味着所有与 UI 相关的代码完成 block 中的任务,我需要添加 dispatch_get_main_queue?

最佳答案

是的,你必须使用主队列来更新 TableView 。因为任何 UI 更新都应该在主线程上执行。

所以你必须在主线程上重新加载表。

dispatch_async(dispatch_get_main_queue(), ^{

// Perform UI operations here
});

建议在辅助线程或后台线程上执行所有计算、网络相关功能,当涉及到执行与 UIKit 相关的操作时,然后使用上述代码简单地切换回主线程。

关于ios - 我是否需要在完成 block 中使用 dispatch_get_main_queue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39346969/

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