2012-02-18 5 views
0

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

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

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

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

ответ

-1

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

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

+0

спасибо. Знаете ли вы, что в документах указано, что это нормально? – Bill

+0

Я не знаю, если это в документах, если честно. Тем не менее, я никогда не сталкивался с проблемой. – pgb

Смежные вопросы