我正在嘗試重新排定將處理更新操作的排隊塊。 主要目標是用最少量的(UI更新請求)更新UI對象(在線用戶表...)。 (服務器有時會降低大量更新,耶!)如何從GCD調度隊列中刪除排隊的塊?
爲簡單起見,主要的情況是;
的dispatch_queue_t實例(隊列將要處理給定的UI更新塊)是一個串行調度隊列(專用調度隊列)
操作(UI更新塊)被調度以dispatch_after與噸量時間(而不是更新每個數據集更新,在t時間內收集更新請求併爲它們執行單個UI更新)
如果我們的數據集已更新,請檢查是否已存在預定事件。如果是,請從dispatch_queue_t實例取消調度。然後用t時間延遲重新調度相同的塊。
另外;
t是用戶可能不會注意到的一小段時間間隔(如500毫秒) 任何其他方法都是可以接受的。
我背後的動機;
我應用相同的邏輯通過Android的處理程序(後& removeCallbacks組合與Runnable實例),我希望我可以在iOS上實現相同。
編輯:
作爲@Sven建議NSOperationQueue的使用是更合適的爲場景,因爲它們支持消除每個的NSOperation。我通過文件瀏覽並找到;
取消操作 一旦添加到操作隊列,操作對象被有效地由隊列擁有和不能被移除。取消操作的唯一方法是取消操作。 您可以通過調用取消方法來取消單個操作對象,也可以通過調用隊列對象的cancelAllOperations方法來取消隊列中的所有操作對象。
只有在確定不再需要時才應取消操作。發出取消命令會將操作對象置於「取消」狀態,從而阻止其運行。由於取消的操作仍被視爲「已完成」,因此依賴於它的對象將收到相應的KVO通知以清除該依賴關係。因此,取消所有排隊操作以響應某些重大事件(如應用程序退出或用戶特別請求取消)而不是選擇性取消操作更爲常見。
我一直想看看NSOperationQueue的,因爲他們是在AFNetworking框架大量使用。謝謝,如果可能的話,我會看看並標記爲答案。 – 2013-02-21 16:04:33