Обработка на последователни изтегляния с NSURLSession

Имам задача за извличане на данни, която искам да изпълня във фонова нишка, но трябва да направя допълнителни извиквания, след като получа отговор в completionBlock.

Например:

NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithURL:requestURL completionHandler:completionBlock] resume];

След като задачата успешно извлече данните и извика completionBlock, искам да изтегля да речем допълнителни 10 ресурса от NSURL, които са част от данните, които completionBlock получава.

Ще бъде ли по-добре да извикате dataTaskWithURL:completionHandler: отново в блока за всяка заявка или да направите блокиращи мрежови повиквания в цикъл в completionBlock?

Благодаря!


person Nirma    schedule 02.01.2015    source източник


Отговори (1)


Да, можете просто да извършвате допълнителните обаждания в рамките на completionBlock. Но заявките не трябва да бъдат "блокиращи", а по-скоро просто ще инициирате допълнителни асинхронни заявки за допълнителните данни. Искате те да работят едновременно един спрямо друг, ако вашият модел поддържа това. Вие плащате значително наказание за производителността, ако подадете тези последващи заявки последователно спрямо едновременно.

person Rob    schedule 02.01.2015
comment
Благодаря за отговора, но да продължа по-нататък, ако тръгнах по маршрута, който споменахте, и исках да се случат определени събития, да речем, когато половината ресурси бъдат изтеглени и след това отново, когато всички ресурси бъдат изтеглени, бих ли просто използвал този метод с променлива на брояча, която други Async блокове се увеличават, когато завършат? - person Nirma; 02.01.2015
comment
да Просто се уверете, че този брояч е безопасен за нишка (напр. изпратете логиката на брояча към серийна опашка, като главна опашка, или използвайте заключване или @synchronized блок). - person Rob; 02.01.2015