Подтвердить что ты не робот

Ленивые загрузки изображений в UITableViewCell

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

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

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

Спасибо.

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

lostInTransit,

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

davidgolightly.blogspot.com/2009/02/asynchronous-image-caching-with-iphone.html

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

developer.apple.com/iphone/prerelease/library/samplecode/URLCache/

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

www.markj.net/iphone-asynchronous-table-image/

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

Ответ 4

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

Ответ 5

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

Кнопка изображения эго - это решение для этого.

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

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

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

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

сделать его объектом в файле m...

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

Ответ 7

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