有什么想法可以取消中间的功能吗? Swift iOS

Any ideas to cancel a function in the middle? Swift iOS

当用户 select 是 UICollectionView 中的单元格时,我调用网络任务来获取一些 JSON。这是 asynchronous,因此 UI 在检索数据时保持活动状态。允许用户 select UICollectionView 中的另一个单元格。我不想停止这个,但我确实想要一种方法来取消第一个函数调用并为现在 selected 单元格调用新方法。

是否有可能 didDeselectItemAt indexPath: 取消任何当前正在执行的任务?

我想在 UI 上放置一个 "please wait" 模态视图,这将阻止第二个单元格 selection,直到函数返回。这是我最好的选择还是有更好的方法?

您可以使用 NSOperationQueue 来创建和跟踪异步请求,并在必要时取消它们。

在此处查看其他问题的答案: GCD cancel async block?

您可以将网络任务作为 NSOperations 提交给 NSOperationQueue

NSOperation有取消方法,NSOperationQueuecancelAllOperations方法。

通过使用 NSOperationQueue 维护单独的线程,可以在执行过程中控制任务,而 GCD 不允许这样做,但两者都适用于特定任务机制的后台和前台执行。

  • GCD 是一种表示将要同时执行的工作单元的轻量级方法。您不安排这些工作单元;系统会帮你安排。

  • NSOperation与GCD相比增加了一点额外的开销,但是你可以在各种操作之间添加依赖性并重新使用,取消或挂起它们。

样本:

var backgroundQueue = NSOperationQueue()
    backgroundQueue.addOperationWithBlock(){
        println("hello from background")
        NSOperationQueue.mainQueue().addOperationWithBlock(){
            self.theLabel.text = "updated from main thread"
        }
    }

现在可以对 backgroundQueue 变量提供 NSOperationQueue 的各种操作。