просмотр таблицы iphone с большим количеством изображений
-
12-09-2019 - |
Вопрос
У меня есть 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, используйте вид прокрутки