Тебе следует предварительно кэшировать свои изображения, а не делать это лениво. При прокрутке таблицы вызывается метод UITableViewDataSource: cellForRowAtIndexPath: , и если вы загружаете туда свои изображения, вы увидите, что он запрашивает содержимое вашей ячейки в качестве прокрутки, создавая задержку в вашем приложении. Попробуйте добавить в свой cellForRowAtIndexPath: что-то вроде этого:
NSDate *date = [NSDate date];
... your cell loading code ...
NSLog( @"Elapsed time to generate cell %.2d", [date timeIntervalSinceNow] );
Вы увидите, сколько времени вы тратите на получение каждой клетки.
Чтобы обойти это, вы можете быть настолько сложными, насколько вам нужно - если у вас есть серия изображений, вам придется быть все более и более умным. Вы можете выполнить постраничную загрузку, где вы отслеживаете NSIndexPath последней запрошенной ячейки, и определяете, идет ли прокрутка вверх или вниз, и используете + NSImage: imageNamed: , чтобы получить сразу несколько страниц изображений вперед (т. е. на 5 изображений впереди вашей текущей позиции), или что-то еще, что вам подходит (используя тот факт, что людям приходится снова опускать палец к нижней части стола, чтобы провести пальцем снова, и поэтому потребление элементов таблицы паузы - вы можете сделать ваш размер страницы достаточно большим, чтобы заполнить пролистывание). Это, вероятно, все еще не очень хорошо, потому что вы просто будете испытывать все свое воздействие сразу, а не нервную нагрузку для каждой ячейки.
Вы можете быстро вернуть управление в пользовательский интерфейс и разрешить системе планировать предварительно выбранную страницу изображений с помощью NSRunLoop: executeSelector: target: аргумент: порядок: режим: отключить основной цикл запуска с помощью NSImage: imageNamed: и затем при запросе ячейки, если вы извлекаете достаточно далеко вперед, она будет доступна для отображения.
Вы должны быть болезненно осведомлены о проблемах с памятью. Если вы обнаружите, что это является проблемой, используйте NSImage: initWithContentsOfFile: , который очистит кэш изображений в ситуациях нехватки памяти. В зависимости от стратегии, используемой алгоритмом аннулирования кэша, в таких ситуациях может произойти «заикание», когда вы очищаете кэши и вам приходится перезагружать недействительные предварительные выборки.