Неделю назад Apple выпустила пример кода для ленивой загрузки изображений в UITableView. Я проверил это и внедрил в свой собственный UITableView (который является drawRect для быстрой прокрутки), чтобы увидеть, есть ли разница с тем, что я уже делал.
После реализации я не уверен, что лучше; новый код или то, что у меня уже было. Я не вижу большого улучшения скорости на моем 3GS.
Метод «песочницы»: лениво загружайте изображения, затем сохраняйте их в локальную папку tmp в «песочнице». Каждый раз, когда отображается ячейка, она ищет, находится ли уже изображение с таким именем файла в папке песочницы. Если это так, он извлекает изображение и отображает его, если нет, он продолжает загрузку, сохраняет его локально, а затем отображает его. Преимущество этого заключается в том, что изображения не будут пустыми при втором открытии приложения. Они уже будут загружены и готовы к показу.
Метод кэширования: это также лениво загружает изображения, однако теперь я включаю UIImage для каждого объекта в массиве, отображаемом в табличном представлении. Вместо того, чтобы сохранять изображение локально, я теперь загружаю изображение и помещаю его в массив для объекта. Теперь, вместо того, чтобы каждый раз проверять имя файла, он просто проверяет, использует ли UIImage != nil кэшированное изображение (или загружает, если nil).
Небольшое отличие также заключается в том, что код кэширования изменяет размер изображения, прежде чем кэшировать его до точного размера того, что отображается в ячейке, тогда как изображение, используемое в примере кода песочницы, на самом деле немного больше, чем то, что ему нужно отображать, что означает он также должен изменять размер на лету при прокрутке. Я читал несколько месяцев назад, что это может быть немного дорого, и я также не уверен, имеет ли это большое значение с точки зрения использования кэшированного изображения вместо изображения, хранящегося в песочнице, и, следовательно, в любом случае больше ресурсов ЦП (по сравнению с к тому, что вы сохраняете от кэширования с помощью кода кэширования выше).
Я предполагаю, что мой вопрос будет заключаться в том, должен ли я вообще возиться с кодом кэширования? Опять же, новый код не будет сразу загружать изображения при новом запуске, в то время как старый код на самом деле делает это, потому что он уже находится в песочнице. Поскольку я не использую изображения повторно, мне нужно загрузить много изображений (из песочницы или кеша), поэтому я не замечаю огромной разницы в скорости. На самом деле, на моем 3GS почти невозможно сказать, по-моему. Прокрутка не очень плавная, и я предполагаю, что это связано с большим количеством изображений, которые я не могу использовать повторно (разные изображения для каждой ячейки). Мне также интересно, станет ли метод песочницы работать медленнее, если, например, в папке будет более 1000 изображений, в конечном итоге он просматривает гораздо больше изображений, чем просто 100 или около того.
Я надеюсь, что я имею смысл. Я хотел быть довольно тщательным с деталями, и я рад дать больше деталей, если это необходимо.
Спасибо!