Как установить высокий приоритет для NSOperation, который рисует текущую страницу PDF в IPad? - PullRequest
0 голосов
/ 01 марта 2012

Я разрабатываю специальную программу для чтения PDF для ipad. Я взял UIScrollView и добавляю / удаляю UIViews, на котором будет отображаться эквивалентный эскиз соответствующей страницы PDF. Я создаю NSOperation идобавление к NSOperationQueue, как только к представлению прокрутки добавляется UIView, для создания миниатюры PDF в фоновом режиме. В любой момент времени в представлении прокрутки будет 3 вида UIView.Файлы PDF, поскольку они отображаются быстро, но проблема в больших / сложных страницах PDF, когда пользователь оставляет навигацию на определенной странице, согласно моей реализации, в фоновом режиме будет одновременно работать 3 NSOperations, чтобы создать 3 миниатюры (одиндля предыдущей страницы, одна для текущей страницы и другая для следующей страницы), поэтому в целом на отображение текущей страницы уходит много времени. Я попытался перебрать все живые NSOperation объекты и установить высокий приоритет для того, который предполагаетсясделать эскиз текущей страницы в scrollViewDidEndDecelerating: метод, но его нне работает, и полученный эффект все тот же. Пожалуйста, предложите мне способ преодолеть мою проблему, спасибо заранее.

1 Ответ

0 голосов
/ 20 ноября 2012

Если вы установили NSOperationQueue для работы в фоновом режиме (т.е. вы не вызвали [NSOperationQueue mainQueue]. Задачи должны выполняться асинхронно, но не обновят представление, работающее в главном потоке, намного позже. Уровень приоритета не имеет значения, поскольку он не относится к потоку, в котором происходит действие. Решением было бы добавить:

-(void)main {

    // ** load PDF image **

    [self performSelectorOnMainThread:@selector(insertImageLoaded:)
                            withObject:img
                        waitUntilDone:YES];

}

По сути, вы должны помнить, что iOS создает небольшой пул потоков, который гораздо более заметен при использовании GCD, чем NSOperations.

...