我最近在我的应用程序中报告了一个崩溃,我发现了正在发生的事情,我需要一些帮助/最佳实践/解决此问题的最佳方法。
我推了一个UICollectionViewController按钮,在viewDidLoad上查询服务器以获取一些数据来填充UICollectionView
我的问题是,如果我按下这个UICollectionViewController然后快速点击后退按钮-后台线程仍然继续获取服务器数据,但是当获取数据时,我用UICollectionView更新performBatchUpdates(),我的应用程序就会崩溃。
发生这种情况的原因是应用程序试图在不再可见的视图上重新加载数据。
这里的最佳做法是什么?
如果我要移回上一个VC,有没有办法“中止”集合视图更新?
类似于:

if self.isMovingFromParentViewController { /* abort any update here? */ }

谢谢

最佳答案

您可以使用DispatchWorkItem来实现以下目标

let backgroundQueue = DispatchQueue.global()

var backgroundTask: DispatchWorkItem!

backgroundTask = DispatchWorkItem { [weak self] in
    // Perform background task
    if !backgroundTask.isCancelled {
       return to main Queue
    }

    backgroundTask = nil // resolve strong reference cycle
}
backgroundQueue.async(execute: backgroundTask)

// When you want to cancel the task
backgroundQueue.async { [weak backgroundTask] in
        backgroundTask?.cancel()
}

10-05 20:03