Это может быть проблемой параллелизма потока, если вы обрабатываете все в основном потоке, он будет зависать до полной загрузки ресурса.Я рекомендую отправить его в последовательную очередь в фоновом потоке, а после завершения загрузки отправить в основной поток.
пример этого:
-(void) GCDSerialQueuesDownload
{
NSString * anURL = @"myURL.com";
dispatch_queue_t serialQueue = dispatch_queue_create("com.dispatch.feed.serial.queue",DISPATCH_QUEUE_SERIAL);
dispatch_queue_t mainQueue = dispatch_get_main_queue();
void (^addFeedBlock)(NSString*) = ^(NSString* url) {
//your download here
dispatch_async(mainQueue,^{
//after finish you download
});
};
dispatch_async(serialQueue, ^{
addFeedBlock(anURL);
});
}
Хороший источник