사용자에게 표시하기 전에 API에서 데이터를 다운로드하려고합니다. 여기GCD - 비동기 대기열 (동기 작업 포함)
내가 뭐하는 거지입니다 : newImages
이 __block
로 선언되어 있기 때문에,
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
데이터를 보장 무엇입니까? 그렇지 않다면 배열의 내용을 두 번째 블록으로 전달하고 최신 내용을 확인하는 가장 안전한 방법은 무엇입니까?
데이터가 어딘가에서 엉망이되어 버린 것 같습니다.
이 부분이 정상적으로 보인다면 다른 것이 잘못되었을 때를 대비하여 전체 코드를 게시하여 도움을 받으십시오.
문제는 여러 이미지를 한꺼번에 다운로드 한 다음 UI 업데이트를 수행한다는 것입니다. for-loop에서 이미지를 잡아 내고 있습니다. 당신이 제공 한 코드는 이미지로 그 이미지를 할 것입니다. 전체 배치를 더 잘 업데이트하지 않겠습니까? 이전에 보았던 것처럼'UICollectionView'에 대한 performBatchUpdates : completion을 통해 실제로 UI를 업데이트하고 있습니다. 너는 무엇을 제안 하겠는가? 'performBatchUpdates'를 다른 것으로 대체해야합니까? 그렇다면 콜렉션 뷰에 대해 다른 업데이트를 수행하기 위해 무엇을 사용해야합니까? – darksky
다운로드 세부 정보를 알지 못해도 알 수 없지만 게시 한 코드를 일괄 다운로드에 사용할 수 없습니다. 서버에서 다운로드 한 이미지 배열 (또는 배열로 변환 할 수있는 일부 개체)이 포함되어 있습니까? 그렇다면 performBatchUpdates : completion :을 사용하여 UI 업데이트를 수행 할 수 있습니다. – rdelmar