Асинхронная загрузка изображений на iPhone - PullRequest
0 голосов
/ 18 февраля 2012

У меня есть сетка изображений, которые загружаются из Интернета, но при прокрутке наблюдается некоторая задержка / заикание. Я использую асинхронный ASIHTTPRequest для выполнения запросов, поэтому сама загрузка происходит в отдельном потоке, но поскольку UIKit не является поточно-ориентированным, после получения ответа NSData я должен вызвать UIImage initWithData в основной теме.

Профилирование показывает, что узкое место на сегодняшний день состоит из внутренних функций синтаксического анализа PNG, вызываемых UIImage initWithData. Я заинтересован в том, чтобы сделать это в фоновом потоке, поэтому основной пользовательский интерфейс остается отзывчивым и меньше задержек.

Но я не уверен, как именно это сделать. Похоже, правильное направление - использовать CGImageRef, поскольку Core Graphics является поточно-ориентированным, но я вижу только CGImageCreateWithPNGDataProvider и CGImageCreateWithJPEGGDataProvider, тогда как UIImage initWithData поддерживает большой список типов изображений.

Я хочу что-то такое же, что и UIImage initWithData, но не имеет проблем с безопасностью потоков.

1 Ответ

0 голосов
/ 18 февраля 2012

Вы можете безопасно вызывать UIImage initWithData в фоновом потоке. Как хорошее правило, в фоновом потоке вы не можете изменять элементы пользовательского интерфейса. В этом случае вам не следует устанавливать свойство image для UIImageView или добавлять UIImageView к суперпредставлению в фоновом потоке.

Однако создание экземпляра UIImage безопасно и будет работать без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...