просмотр таблицы iphone с большим количеством изображений

StackOverflow https://stackoverflow.com/questions/1247554

Вопрос

У меня есть UITableView это отображает много изображений в ячейках, и я не очень доволен производительностью прокрутки.Мой UITableView это что-то вроде приложения для фотографий на iPhone.Кто-нибудь знает, почему приложение iphone foto прокручивается так чертовски быстро, как будто на экране ничего нет.

И есть ли у кого-нибудь несколько советов / хитростей, чтобы увеличить мою производительность / скорость прокрутки?

Это было полезно?

Решение

Вы должны предварительно кэшировать свои изображения, а не делать это лениво.Когда вы прокручиваете свою таблицу, Источник UITableViewDataSource:cellForRowAtIndexPath: вызывается метод, и если вы загружаете туда свои изображения, то увидите, что он запрашивает содержимое вашей ячейки в качестве прокрутки, создавая задержку в вашем приложении.Попробуйте ввести создание вашей ячейки forrowatindexpath:что- то вроде этого:

NSDate *date = [NSDate date];
... your cell loading code ...
NSLog( @"Elapsed time to generate cell %.2d", [date timeIntervalSinceNow] );

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

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

Вы можете быстро вернуть управление пользовательскому интерфейсу и позволить системе планировать вашу предварительно выбранную страницу изображений с помощью NSRunLoop:performSelector:цель: аргумент: порядок: режим: выключите основной цикл выполнения, используя NSImage:imageNamed: , а затем, когда ячейка будет запрошена, если вы выполняете выборку достаточно далеко вперед, она будет доступна для отображения.

Однако вы должны быть болезненно осведомлены о проблемах с памятью.Если вы считаете, что это проблема, используйте NSImage:инициализация с помощью contentsoffile:, который очистит кэши изображений в ситуациях нехватки памяти.В зависимости от стратегии, используемой алгоритмом аннулирования кэша, эти ситуации могут вызвать "заикание" при очистке кэшей и необходимости перезагрузки недействительных предварительных выборок.

Другие советы

Отличные результаты производительности прокрутки были достигнуты благодаря созданию подкласса UITableViewCell и непосредственному отображению содержимого каждой ячейки.Смотрите принятый ответ для этот вопрос для получения более подробной информации и ссылок на примеры кода.

Проблема здесь в памяти, вы загружаете слишком много изображений с высоким разрешением одновременно, приложение foto не использует tableview, оно использует вид прокрутки, и оно загружает максимум 3 изображения одновременно, поэтому память не является проблемой, если вы пытаетесь сделать что-то похожее на приложение foto, используйте вид прокрутки

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top