Ленивая загрузка ЛОКАЛЬНЫХ изображений в UITableView - PullRequest
2 голосов
/ 13 декабря 2011

У меня есть табличное представление, которое может отображать сотни миниатюр изображений.У меня проблема с задержкой при быстрой прокрутке.

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

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

Спасибо

Данн

1 Ответ

5 голосов
/ 13 декабря 2011

Когда у вас есть удаленные образы, обычно вы планируете асинхронный сетевой вызов, который требует времени для завершения, и это обычно не влияет на обновление табличного представления из-за того, что сетевое задание выполняется в отдельном потоке (если вы не поставили в очередьсотни сетевых вызовов, это замедлит работу всей системы!) Обычно при работе с локальными изображениями вы выполняете загрузку изображений из файловой системы непосредственно в методе источника данных

tableView:cellForRowAtIndexPath:
табличного представления, который выполняется таблицей, как только новыйячейка должна быть отображена.Таким образом, сохраняя изображение локально, у вас возникает желание немедленно загрузить его в основной поток, и это приводит к проблеме прокрутки.

Но UITableView является подклассом UIScrollView и затем отвечает на сообщения UIScrollViewDelegate проверкаответ на этот стекопоток .Таким образом, при надлежащем контроле этих методов (например, ускорения / замедления и перетаскивания) вы можете точно настроить загрузку вашего изображения.Это означает, что во время прокрутки таблицы на полной скорости не рекомендуется загружать любое изображение, но, как только таблица не прокручивается, или замедляется, или ее просто перетаскивают (касанием), вы можете попытаться загрузить изображения.Как правило, критическое событие происходит, когда пользователь заканчивает перетаскивание, и прокрутка идет с максимальной скоростью (для этого есть метод делегата).Вы должны хорошо изучить и понять эти методы, поскольку они позволяют тщательно отслеживать события прокрутки, и на их основе вы можете экспериментировать и точно настраивать загрузку вашего изображения.

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

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