У меня есть прокручиваемая сетка фотографий, которая выглядит и работает в точности так же, как и подборщик фотографий на iPhone. Он построен из UITableView, который использует пользовательский UITableViewCell, который отображает ряд фотографий (очень похоже на то, как Three20 реализует его).Улучшение производительности прокрутки UITableView при загрузке изображений
Он отлично работает, за исключением того, что производительность прокрутки плохая. Я уже придерживаюсь большинства лучших практик быстрой прокрутки UITableView (à la Tweetie).
Изображения все в комплекте с приложением. Я загружаю их в поток пользовательского интерфейса, по запросу. Я использую imageNamed UIImage: так, чтобы изображения были кэшированы после их первой загрузки. Как только я прокручивал один раз в таблице, он прокручивается очень плавно.
Проблема в том, что в первый раз, прокручивая представление таблицы, прокрутка неустойчива. Я профилировал приложение и обнаружил, что большую часть времени тратится на загрузку изображений из файловой системы. Они являются изображениями JPEG, уже правильно настроенными (малыми). Вместо этого я попытался использовать PNG-изображения, но производительность не очень улучшилась.
Уборщик фотографий iPhone показывает намного лучшую производительность при загрузке. Мне интересно, будет ли объединение всех фотографий в одно изображение, которое я загружу один раз, а затем разделить на более мелкие изображения, будет быстрее. Конечно, он работает в играх, но я знаю, что это совсем другая история. Кто-нибудь имел опыт в этом?
Любые другие идеи о том, как я могу улучшить производительность?
Кстати, у меня есть аналогичная, хотя и меньшая проблема с производительностью для другого UITableView, который просто использует стандартный UITableViewCells с одним изображением, назначенным для изображения в строке.
Я пробовал обе методики: предварительное кэширование и асинхронная загрузка. Загрузка Async выглядела ужасно, так как изображения загружаются так быстро, но достаточно медленно для заметного мерцания. Предварительное кэширование отлично работало. Я беспокоюсь о том, что происходит, когда мне нужно предварительно кэшировать 350 изображений за несколько месяцев (в настоящее время мне нужно только предварительно кэшировать 100), но я перейду через этот мост, когда я доберусь до него. Спасибо за отличный ответ. –
Добро пожаловать! Для асинхронной загрузки это может выглядеть лучше, если у вас нет изображения-заполнителя, а вместо этого просто пустая область, где будет отображаться изображение.Это может помешать мерцанию. –