Problema com o GCD e muitos tópicos

Eu tenho uma classe de carregador de imagem que forneceu com cargas NSURL e imagem da web e executa o bloco de conclusão. O código é realmente muito simples

- (void)downloadImageWithURL:(NSString *)URLString completion:(BELoadImageCompletionBlock)completion
{
    dispatch_async(_queue, ^{
//    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
        UIImage *image = nil;
        NSURL *URL = [NSURL URLWithString:URLString];
        if (URL) {
            image = [UIImage imageWithData:[NSData dataWithContentsOfURL:URL]];
        }  
        dispatch_async(dispatch_get_main_queue(), ^{
            completion(image, URLString);
        });
    });

}

Quando eu substituir

dispatch_async(_queue, ^{

com comentou

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{

As imagens estão sendo carregadas muito mais rápido, o que é bastante lógico (antes que as imagens fossem carregadas uma de cada vez, agora um grupo delas está sendo carregado simultaneamente). Meu problema é que eu tenho talvez 50 imagens e chamo o método downloadImageWithURL: completion: para todos eles e quando eu uso a fila global em vez de _queue meu aplicativo eventualmente falha e vejo que há mais de 85 threads. O problema pode ser que a minha chamada dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_HIGH, 0) 50 vezes seguidas faz com que o GCD crie muitos threads? Eu pensei que gcd lida com todos os passos e garante que o número de threads não é enorme, mas se não for o caso, há alguma maneira que eu possa influenciar o número de segmentos?

questionAnswers(3)

yourAnswerToTheQuestion