Ленивая загрузка изображений в UITableViewCell - PullRequest
33 голосов
/ 10 февраля 2009

У меня есть около 50 пользовательских ячеек в моем UITableView. Я хочу отобразить изображение и метку в ячейках, где я получаю изображения с URL.

Я хочу выполнить ленивую загрузку изображений, чтобы пользовательский интерфейс не зависал во время загрузки изображений. Я попытался получить изображения в отдельных потоках, но мне нужно загружать каждое изображение каждый раз, когда ячейка снова становится видимой (в противном случае повторное использование ячеек показывает старые изображения)

Приложения, такие как Facebook, загружают изображения только для видимых в данный момент ячеек, и после загрузки изображений они не загружаются снова. Может кто-нибудь подскажите, пожалуйста, как продублировать это поведение.

Спасибо.

Редактировать
Попытка кэшировать изображения в объекте NSMutableDictionary создает проблемы, когда пользователь быстро прокручивает. Я получаю изображения только тогда, когда прокрутка полностью останавливается и очищается кеш при предупреждении памяти. Но приложение неизменно получает предупреждение памяти (из-за размера кэшируемых изображений) и очищает кэш перед перезагрузкой. Если прокрутка выполняется очень быстро, происходит сбой.

Любые другие предложения приветствуются

Ответы [ 7 ]

19 голосов
/ 10 февраля 2009

Загрузка изображений в фоновом потоке все еще хорошая идея. Если вы не хотите перезагружать их каждый раз, я бы предложил настроить NSMutableDictionary и хранить там изображения. Вы можете использовать какой-то уникальный идентификатор, такой как идентификатор строки или даже имя изображения, в качестве ключа для каждого изображения.

При загрузке ячейки вы отправляете сообщение objectForKey: в NSMutableDictionary для получения изображения для этой конкретной ячейки (на основе вашего уникального ключа для нее). Если он возвращает ноль, это означает, что изображение отсутствует в кэше, и вам нужен поток загрузки фонового изображения, чтобы его восстановить. В противном случае вы получите обратно соответствующее изображение для отображения ячейки таблицы. В предупреждении о памяти вы можете очистить этот кэш изображений без каких-либо побочных эффектов (кроме принудительной их перезагрузки по требованию).

4 голосов
/ 25 мая 2009

lostInTransit,

У меня похожая проблема, и, изучая множество возможных решений, я нашел этот пост в блоге:

davidgolightly.blogspot.com / 2009/02 / асинхронно-образ-кэширование с-iphone.html

Я бы также предложил вам загрузить образец URLCache с веб-сайта Apple для разработчиков:

developer.apple.com / iphone / пререлиз / библиотека / samplecode / Urlcache /

А вот еще один пост по проблеме:

www.markj.net / iphone-асинхронно-таблицы-изображение /

Я бы хотел, чтобы вы также поделились своими результатами.

4 голосов
/ 11 февраля 2009

Я только что успешно справился с той же проблемой, используя пользовательскую операцию NSO для загрузки изображений в очереди и сохраняя их в статическом NSMutableDictionary в качестве кэша. Ниже приведена ссылка на основу кода, который я использовал для решения проблемы.

Загрузка удаленных изображений для UITableViewCell

Лучше всего прочитать все темы на форуме, чтобы помочь вам понять, что на самом деле происходит.

3 голосов
/ 16 сентября 2014

Ленивая загрузка похожа на запрос синхронного типа. Означает ожидание ответа

кнопка изображения эго является решением для этого ..

кнопка изображения эго является асинхронным запросом типа .. не ждите ответа .. просто отображайте данные одновременно ....

вы можете скачать папку с github ....

добавить в свой проект ...

в xib..в изображении, измените класс на кнопку изображения эго ...

сделать объект из этого файла m ...

вы можете использовать .....

2 голосов
/ 17 ноября 2011

Для тех, кто заинтересован и ленив, как и я, я хотел бы предложить реализацию с открытым исходным кодом (лицензия MIT) для реализации отложенной / кэшированной сети изображений UIImageView: SDWebImage

0 голосов
/ 19 мая 2013

Это Учебное пособие о NSOperation с примером, показывающим, как Lazy загружать изображения в UITableViewCell

0 голосов
/ 14 мая 2012

UITableView с кэшированием изображения и изменением размера / настройкой в ​​фоновом потоке:

http://blog.slaunchaman.com/2011/08/12/gcd-example-updated-now-with-more-speed/

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