Problem z GCD i zbyt wieloma wątkami

Mam klasę programu ładującego obraz, który zawiera ładowanie i obraz NSURL z sieci i wykonuje blok zakończenia. Kod jest całkiem prosty

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

}

Kiedy wymieniam

dispatch_async(_queue, ^{

z komentarzem

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{

Obrazy ładują się znacznie szybciej, co jest dość logiczne (zanim obrazy zostaną załadowane pojedynczo, teraz kilka z nich ładuje się jednocześnie). Mam problem z tym, że mam około 50 obrazów i nazywam downloadImageWithURL: complete: metoda dla nich wszystkich i kiedy używam globalnej kolejki zamiast _queue moja aplikacja w końcu ulega awarii i widzę, że istnieje 85+ wątków. Czy problem może polegać na tym, że moje wywołanie dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_HIGH, 0) 50 razy z rzędu powoduje, że GCD tworzy zbyt wiele wątków? Myślałem, że gcd obsługuje wszystkie stąpanie i upewnia się, że liczba wątków nie jest duża, ale jeśli tak nie jest, czy jest jakiś sposób, w jaki mogę wpłynąć na liczbę wątków?

questionAnswers(3)

yourAnswerToTheQuestion