При разработке iPad PDF-Reader мы решили подготовить изображения с высоким разрешением для рендеринга интенсивных страниц (в них много путей) и использовать их вместо страниц PDF, чтобы избежать проблем с производительностью. Мы решили, что 3*768 by 3*1024
- это хороший компромисс между удобочитаемостью и производительностью рендеринга, что приводит к ~ 1,5 МБ JPEG .
Однако мы протестировали две реализации для отображения страниц с изображениями. Один использует подкласс CATiledLayer
, который также отвечает за обработку "обычных" страниц PDF (рисование с CGContextDrawImage
), а другой использует UIImageView
. Преимущество последнего заключается в том, что отображение и масштабирование выполняются очень быстро, но использование памяти действительно плохо - это занимает около 30 МБ в памяти (что соответствует размеру растрового изображения). Другой подход (CATiledLayer
) требует больше времени для первого отображения страницы и еще две секунды для повторного рендеринга после масштабирования (аналогично PDF-страницам, но гораздо быстрее), но не занимает больше памяти, чем необходимо для отображения. намного меньшее изображение или страница PDF.
Кто-нибудь знает, что происходит за кулисами, и возможно ли совместить низкое использование памяти CGContextDrawImage
с высокой производительностью UIImageView
с помощью Quartz Framework.