我試圖從API下載數據,然後將其顯示給用戶。GCD - 具有同步任務的異步隊列
下面是我在做什麼:
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(concurrentQueue, ^{
__block NSMutableArray *newImages;
dispatch_sync(concurrentQueue, ^{
newImages = [NSMutableArray array];
// images retrieved using `NSURLConnection sendSynchronousRequest`
});
dispatch_sync(dispatch_get_main_queue(), ^{
// display images to the user
});
});
我的問題是,既然newImages
與__block
聲明,我總是保證在主隊列執行第二任務時擁有最新的數據newImages
?如果不是,將數組內容傳遞到第二個塊並確保其最新內容的最安全方法是什麼?
我認爲我的數據在某個地方變得混亂,因此我在問這個問題。
如果這看起來很好,那麼我會發布我的完整代碼,以幫助整個事情,以防萬一其他錯誤。
問題是我有多個圖像,我想一次下載它們,然後對其執行UI更新。我正在for循環中抓取圖像。您提供的代碼將通過圖像來完成該圖像。整個批次不會更新更好嗎?我實際上是通過'performBatchUpdates:completion'來更新UI的'UICollectionView',就像你在我以前的問題中看到的那樣。你會建議什麼?我應該用其他東西來替換'performBatchUpdates'嗎?如果是這樣,那麼我將使用什麼來在集合視圖之後執行另一個更新? – darksky
如果不知道下載的詳細信息,我很難分辨出來,但沒有理由我發佈的代碼不能用於批量下載。從服務器下載包含圖像數組(或可以轉換爲數組的一些對象)?如果是這樣,那麼你仍然可以使用performBatchUpdates:completion:來做UI更新。 – rdelmar