Загрузка изображений из фоновой темы с использованием блоков

У меня есть следующий метод, который в основном вызывает запрос на загрузку массива NSData изображений в фоновом streamе:

[query findObjectsInBackgroundWithBlock:^(NSArray * objects, NSError * error){ }]; 

В этом случае объекты представляют собой массив NSData. Проблема в том, что если у меня есть 100 изображений для загрузки (100 элементов в массиве). Это означает, что пользователю придется подождать довольно много времени, чтобы увидеть изображение, отображаемое в UITableView. Я хочу, чтобы они увидели изображение, когда оно доступно / загружено. Должен ли я затем изменить код, чтобы он загружал 100 фоновых streamов?

вы можете реализовать что-то вроде этого в cellForRowAtIndexPath:

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

  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void) { NSData *data0 = [NSData dataWithContentsOfURL:someURL]; UIImage *image = [UIImage imageWithData:data0]; dispatch_sync(dispatch_get_main_queue(), ^(void) { UIImageView* imageView = (UIImageView*)[cell viewWithTag:100]; imageView.image = image; }); }); 

Нет, вам не нужно создавать много фоновых streamов. Используйте NSOperationQueue .

Вы можете создать NSInvocationOperation и установить его в NSOperationQueue

например: Инициализация NSOperationQueue :

 NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init]; 

После создания NSInvocationOperation :

 NSInvocationOperation* downloadOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(selectorToDownloadImage:) object:YouData]; [operationQueue addOperation:downloadOperation]; [downloadOperation release]; 
  • как скрыть навигационную панель, когда я нажимаю навигационный controller?
  • UIPopoverPresentationController на iOS 8 iPhone
  • Как resize UIModalPresentationFormSheet?
  • iPhone SDK: в чем разница между loadView и viewDidLoad?
  • NSDateFormatter dateFromString возвращает nil
  • Предварительная буферизация для AVQueuePlayer
  • UIPopoverController для iphone не работает?
  • Iphone: как отобразить изображения в каталоге документов в режиме просмотра изображений?
  • Добавление изображений в UITextView
  • Преобразование NSArray в NSDictionary
  • Как я могу округлить значение float до двух постсимвольных позиций?
  • Interesting Posts

    Установите языковой стандарт для системы по умолчанию UTF-8

    Создать запись реестра для связывания расширения файла с приложением в C ++

    О полноэкранном режиме и без заголовка из манифеста

    Почему мои защитники не препятствуют рекурсивному включению и множественным определениям символов?

    Как запустить приложение C # при запуске Windows?

    Использование malloc для размещения многомерных массивов с разной длиной строк

    Как добавить в файл как sudo?

    Android: Как я могу проверить ввод EditText?

    Когда, если когда-либо, цикл разворачивания по-прежнему полезен?

    Клиенты Windows, не использующие сервер NTP, предоставляемые через DHCP

    Объем памяти моего компьютера

    Ограниченные проблемы с подключением в сети, нужна помощь в устранении основной причины

    Как работают servlets? Создание, сеансы, общие переменные и multithreading

    Локальный кеш для NAS или сетевой папки

    Повторить задачу несколько раз на основе пользовательского ввода в случае исключения в задаче

    Давайте будем гением компьютера.