簡體   English   中英

有什么想法可以取消中間的功能嗎? 迅捷的iOS

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM