[英]Any ideas to cancel a function in the middle? Swift iOS
當用戶在UICollectionView
選擇一個單元格時,我將調用一個網絡任務來獲取一些JSON。 這是asynchronous
因此在檢索數據時,UI保持活動狀態。 允許用戶在UICollectionView
選擇另一個單元格。 我不想停止此操作,但是我想要一種方法來取消第一個函數調用,並為現在選擇的單元格調用新方法。
有沒有辦法也許didDeselectItemAt indexPath:
中取消選擇當前正在執行的任務?
我正在考慮在UI上放置一個“ please wait”模式視圖,這將阻止第二個單元格的選擇,直到函數返回。 這是我最好的選擇,還是有更好的方法?
通過使用NSOperationQueue
維護單獨的線程,可以在執行過程中對任務進行控制,而GCD
不允許這樣做,但是兩者NSOperationQueue
用於特定任務機制的后台和前台執行。
GCD
是一種輕量級的方式來表示將要同時執行的工作單元。 您不會安排這些工作單元; 系統會為您安排時間。
與GCD相比, NSOperation
增加了一些額外的開銷,但是您可以在各種操作之間添加依賴關系,然后重新使用,取消或暫停它們。
樣品:
var backgroundQueue = NSOperationQueue()
backgroundQueue.addOperationWithBlock(){
println("hello from background")
NSOperationQueue.mainQueue().addOperationWithBlock(){
self.theLabel.text = "updated from main thread"
}
}
現在可以通過backgroundQueue
變量提供NSOperationQueue
提供的各種操作。
您可以使用NSOperationQueue創建並跟蹤異步請求,並在必要時取消它們。
在這里查看其他問題的答案: GCD取消異步代碼塊?
您可以將網絡任務作為NSOperations
提交到NSOperationQueue
。
NSOperation
具有cancel方法,而NSOperationQueue
具有cancelAllOperations
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.