Проблема с GCD и слишком большим количеством потоков

У меня есть класс загрузчика изображений, который обеспечивает загрузку NSURL и изображение из Интернета и выполняет блок завершения. Код на самом деле довольно прост

- (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);
        });
    });

}

Когда я заменяю

dispatch_async(_queue, ^{

с закомментированным

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{

Изображения загружаются намного быстрее, что вполне логично (раньше эти изображения загружались по одному, теперь куча загружается одновременно). Моя проблема в том, что у меня есть, возможно, 50 изображений, и я вызываю метод downloadImageWithURL: complete: для всех них, и когда я использую глобальную очередь вместо _queue, мое приложение в конечном итоге вылетает, и я вижу, что существует более 85 потоков. Может ли быть проблема в том, что мой вызов dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_HIGH, 0) 50 раз подряд заставляет GCD создавать слишком много потоков? Я думал, что gcd обрабатывает все шаги и гарантирует, что количество потоков невелико, но если это не так, есть ли способ повлиять на количество потоков?

Ответы на вопрос(3)

Ваш ответ на вопрос