AFNetworking + NsOperationQueue - загрузка тысяч изображений

Я работаю над задачей (только для iOS5 +), которая включает в себя загрузку тысяч изображений с сервера. Изображения относятся к определенным категориям, и каждая категория может иметь сотни изображений. Что мне нужно сделать, это:

1) Убедитесь, что приложение загружает любые отсутствующие изображения в фоновом режиме, если приложение активно (даже когда пользователь просматривает некоторые другие области приложения, которые не связаны с фотографиями).

2) Когда пользователь нажимает на категорию фотографий, изображения в этой категории должны загружаться с высоким приоритетом, потому что они должны быть видны немедленно.

Все вышеперечисленное происходит, только если изображение еще не доступно в автономном режиме. Как только оно будет загружено, изображение будет использовано из локального хранилища.

Чтобы решить эту проблему, я использую следующую логику:

1) В AppDelegate.m, вapplicationDidBecomeActiveЯ начинаю загружать любые недостающие изображения. Для этого я делаю запрос Core Data, выясняю, какие изображения отсутствуют, и начинаю скачивать их в потоке с приоритетом BACKGROUND. Что-то вроде этого :-

 dispatch_queue_t imageDownloadQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
dispatch_async(imageDownloadQueue, ^{
    [DataDownloader downloadMissingImages];
});
dispatch_release(imageDownloadQueue);

downloadMissingImages код выглядит так:

NSOperationQueue *downloadQueue = [[NSOperationQueue alloc] init];
        downloadQueue.maxConcurrentOperationCount = 20;

        for(MyImage *img in matches)
        {
            NSURLRequest *request = [NSURLRequest requestWithURL:img.photoUrl];
            AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:request success:^(UIImage *image) {

                [MyImage imageFromAPI:image inManagedObjectContext:document.managedObjectContext];

                NSLog(@"Successfully downloaded image for %@", img.title);      
            }];

            [downloadQueue addOperation:operation];
        }

Это работает, но блокирует основной интерфейс, и приложение через некоторое время вылетает. Это когда я пытаюсь скачать около 700 изображений. С большим количеством изображений это, конечно, вылетит.

2) Когда пользователь нажимает на категорию, мне нужно сначала загрузить эти изображения, так как они должны быть немедленно показаны пользователю. Я не уверен, как я могу прервать вызов отсутствующего изображения и сказать ему начать загрузку определенных изображений раньше других.

Итак, в основном мне нужно загрузить все отсутствующие изображения в фоновом режиме, но если пользователь просматривает категорию фотографий, эти изображения должны иметь высокий приоритет в очереди на загрузку.

Я в недоумении, как заставить это работать эффективно. Какие-нибудь мысли?

Журналы аварий выглядят так

PAPP(36373,0xb065f000) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
PAPP(36373,0xb065f000) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Jun 24 11:39:45 MacBook-Pro.local PAPP[36373] <Error>: ImageIO: JPEG    Insufficient memory (case 4)

Заранее спасибо.

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

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