![](/img/trans.png)
[英]Objective-C : Start an object on a background thread — interact as usual?
[英]cancel a background thread in Objective-C
如何取消Objective-C中的后台線程?
我正在調用后台線程,如下所示:
[self performSelectorInBackground:@selector(setupThumbnails) withObject:nil];
在滑動發生時調用它,對於我想要取消先前后台線程請求的每次滑動。
維護線程的取消屬性,並在線程中定期檢查。 您需要使用鎖或原子函數(由操作系統及其框架提供,而不是自己實現!)來指示應該取消線程。 系統提供的原子函數記錄在atomic
。
更好的是在NSOperationQueue而不是NSThread上使用NSOperation。 它仍將使用線程在后台執行工作,但它允許框架和操作系統代表您管理線程池,NSOperation本身具有您可以檢查的isCancelled
屬性 - 以及取消單個NSOperation的能力或整個NSOperationQueue中的所有操作。
例如,您可以使用“設置一個縮略圖”操作,然后只需將一個此類操作添加到隊列中,即可設置每個縮略圖。 操作系統和框架將合作管理用於執行這些操作的線程數,但您也可以設置隊列的寬度,以確保最多只能同時運行多個導入。 如果用戶取消,您可以要求隊列取消所有未完成的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.