-1

我想知道如何在iOS中使用多線程。我知道GCD和NSOperationQueue,但我不知道如何正確使用它們。iOS正確使用多線程

  1. 什麼時候應該使用GCD/NSOperationQueue?
  2. 如果結果視圖不再可見,我該如何取消隊列? (即發送請求的東西,但用戶然後決定點擊後退按鈕去另一個視圖,這意味着我不再需要這個「東西」)

任何示例將不勝感激。

謝謝。

+2

http://stackoverflow.com/questions/10373331/nsoperation-vs-grand-central-dispatch http://stackoverflow.com/questions/8033465/nsoperationqueue-vs-gcd 的http://計算器.com/questions/4344884/which-tasks-are-more-suitable-to-nsoperation-than-gcd :) – Adithya

+0

謝謝你回答問題1,我仍然不確定如何操縱隊列以便知道何時取消正在運行的操作。 –

回答

1

可能值得一提的是,一旦操作已經開始(GCD塊或NSOperation),只有在操作本身內置了取消功能時,才能取消它。例如,NSOperation有一個-cancel方法,但只有在您的操作定期檢查操作內部的-isCanceled標誌,然後在發現該操作已被取消的情況下提前返回時才起作用。從文檔-[NSOperation cancel]

此方法不會強制您的操作代碼停止。相反,它 更新對象的內部標誌以反映狀態的變化。如果 該操作已經執行完畢,該方法沒有 的效果。取消當前在操作 隊列中但尚未執行的操作,可以比平時更快地從隊列中刪除操作。

同樣,GCD塊可以檢查一些共享標誌並提前返回,但這兩種機制都不能強制取消操作。原因是如果你能夠強制取消操作,那麼它就沒有機會清理自己,因此在任務中分配的任何內存都將被泄漏。

解決此限制的另一個常見方法是將您的任務分成許多更小的操作,以便單個操作完成的時間足夠小,可以忽略不計。這使您能夠在整個隊列級別暫停/取消隊列/ NSOperationQueue,並達到預期的效果。

0

只要通過Apple Docs,您可以找到方法setSuspended:cancelAllOperations。這可以用來實現你所要求的。