有什么想法可以取消中间的功能吗? 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
有取消方法,NSOperationQueue
有cancelAllOperations
方法。
通过使用 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
的各种操作。
当用户 select 是 UICollectionView
中的单元格时,我调用网络任务来获取一些 JSON。这是 asynchronous
,因此 UI 在检索数据时保持活动状态。允许用户 select UICollectionView
中的另一个单元格。我不想停止这个,但我确实想要一种方法来取消第一个函数调用并为现在 selected 单元格调用新方法。
是否有可能 didDeselectItemAt indexPath:
取消任何当前正在执行的任务?
我想在 UI 上放置一个 "please wait" 模态视图,这将阻止第二个单元格 selection,直到函数返回。这是我最好的选择还是有更好的方法?
您可以使用 NSOperationQueue 来创建和跟踪异步请求,并在必要时取消它们。
在此处查看其他问题的答案: GCD cancel async block?
您可以将网络任务作为 NSOperations
提交给 NSOperationQueue
。
NSOperation
有取消方法,NSOperationQueue
有cancelAllOperations
方法。
通过使用 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
的各种操作。