我正在開發iPad應用程序,目前我正在努力尋找多線程的最佳方法。讓我來說明這一點有一個簡單的例子:
我有2子視圖,目錄選擇器,並在選定的目錄中的所有圖像的縮略圖畫廊的視圖。由於「下載」並生成這些縮略圖可能需要很長時間,因此我需要多線程,因此視圖的交互和更新不會被阻止。目標C中的最佳多線程方法?
這是我已經嘗試過:
[自performSelectorInBackground:@selector(displayThumbnails :) withObject:currentFolder]。
這工作得很好,因爲用戶交互並沒有得到阻止,但它草草收場,當用戶在另一個文件夾水龍頭,而第一個文件夾仍在加載失敗。兩個線程試圖訪問相同的視圖和變量,這會導致彼此正確執行。當用戶點擊另一個文件夾時,當前正在加載的文件夾的displayThumbnails
應該中止。我沒有找到任何辦法做到這一點..
NSThreads
我試過,但幾乎同樣的問題掙扎與第一種方法,我沒有找到一個(簡單)的方式來取消持續的方法。 (是的,我知道約[aThread cancel]
,但沒有找到'恢復'線程的方式)。也許我應該繼承NSThread
並實現我自己的isRunning等方法?但是沒有更好的辦法,或者我忽略了第三種(甚至是第四種和第五種)選項嗎?
我認爲這是一個相當簡單的例子,我認爲沒有繼承NSThread
也許有更好的解決方案。那麼,你會怎麼做?你的意見請!
顯然我不能作出答案,只讀「GCD」 – JustSid 2012-07-15 22:14:08
你完全錯了。認真。 – puzzle 2012-07-15 22:23:52
請參閱[這裏](https://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html%23//apple_ref/doc/uid/TP40008091-CH102-SW2)爲什麼GCD如此酷:)或者更好,請觀看WWDC會議之一:) 關於您的原始問題:無論您是使用線程,GCD還是NSOperationQueue,取消或暫停都有多種方式。你可以睡覺,暫停,等待一個鎖,完全取消等等。我認爲NSOperationQueue現在對你來說會是一個很好的解決方案,因爲它會自動引導你到一個合理的實現。 – puzzle 2012-07-15 22:32:32