Является ли ALAssetsLibrary потокобезопасным (тупиковая ситуация возникает при использовании нескольких потоков)

Сейчас я работаю над крошечным проектом, который предназначен для загрузки ВСЕХ фотографий галереи в мое приложение, чтобы показать какой-то необычный эффект. К сожалению, эти эскизы по умолчанию, предоставленные системой, не могут удовлетворить мои требования. Поэтому я пытаюсь создать свои собственные миниатюры, используя "fullScreenImage". Чтобы ускорить процесс, я загружаю fullScreenImage, используя фоновые операции. Основными методами являются:

- (void)getFullScreenImage:(NSURL *)url success:(void(^)(UIImage *))callback
{
   NSLog(@"Requesting %@", url);
    [assetsLibraryInstance assetForURL:url resultBlock:^(ALAsset *asset) {
        callback(asset.defaultRepresentation.fullScreenImage);
    }
    failureBlock:nil];
}

- (void)processURLs:(NSArray *)urls
{
    for (NSURL *url in urls) {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) ^{
             [self getFullScreenImage:url success:^(UIImage *img) {
                  NSLog(@"Got image %@", img);
             }] ;
        });
    }
}

В консоли печатается только журнал "Запрос...", метод "getFullScreenImage" заблокирован, никаких выходных данных нет.

Я попробовал следующие методы, чтобы обойти эту проблему:

  1. Не делится активами LibraryInstance (не работает)
  2. Не отправляйте dispatch_async при перечислении URL-адресов в "processURL". (Работал, но я не хочу использовать поток подписи для обработки всех URL)
  3. Не используя глобальную очередь, используя основную очередь (Работало, но все эти "fullScreenImage" работали в потоке пользовательского интерфейса, что делало пользовательский интерфейс невосприимчивым)
  4. Использование личной очереди, созданной с помощью "dispatch_queue_create". (Не работает)

Итак, безопасен ли поток ALAssetsLibrary? Я думаю, это не так... Или есть ли лучший способ, которым я могу использовать для:

  1. Загрузите fullScreenImage в фоновом режиме
  2. Многопоточность

Спасибо!

0 ответов

Другие вопросы по тегам