可能重複:
How do I kill/suspend/close an asyncronous block in GCD?如何取消上一個GCD塊的前一個塊?
我工作的一個應用程序,並圖像處理和顯示產生的圖像。我使用UIScrollView讓用戶滾動所有圖像,因爲圖像不是標準的jpg或png,需要時間加載。我使用GCD異步加載,當完成派遣到主隊列顯示。代碼片段如下:
- (void)loadImage:(NSString *)name
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage *image = [Reader loadImage:name];
dispatch_sync(dispatch_get_main_queue(), ^{
[self displayImage:image];
});
});
}
這在大多數情況下運行良好。但是當你滾動得太快以至於在第一個加載的圖像被顯示之前該方法可能會被調用多次。然後當你停止時,當前imageView將快速顯示多個先前的圖像,然後最後顯示當前圖像。由於內存問題很容易崩潰。
我想知道是否有辦法通知隊列取消先前的隊列,如果隊列中有新的塊(這意味着在前一個塊完成之前再次調用該方法)?或者其他更好的建議?
在此先感謝。
@Monolo謝謝,我會看看 – chancyWu
@Monolo他們是完全不同的,我想用我的即將停止之前發送的塊塊,這似乎更困難,我不知道如何做到這一點。 – chancyWu
看看dispatch_suspend和dispatch_release方法 - 我不知道你的確切情況,所以我不能肯定地告訴我。 –