Почему UIImageView так интенсивно использует память по сравнению с CGContextDrawImage

При разработке PDF-Reader для iPad мы решили подготовить изображения высокого разрешения для страниц с интенсивным рендерингом (в них много путей) и использовать их вместо страниц PDF, чтобы избежать проблем с производительностью. Мы решили, что 3 * 768 на 3 * 1024 является хорошим компромиссом между удобочитаемостью и производительностью рендеринга, что приводит к ~ 1,5 МБ jpeg .

Однако мы протестировали две реализации для отображения страниц изображений. Один использует подкласс CATiledLayer , который также отвечает за обработку «обычных» страниц PDF (рисование с помощью CGContextDrawImage ), а другой - UIImageView . Последний имеет то преимущество, что отображение и масштабирование выполняются очень быстро, но использование памяти очень низкое - оно занимает около 30 МБ памяти (что соответствует размеру растрового изображения). Другой подход ( CATiledLayer ) требует больше времени для первого отображения страницы и требует еще двух секунд для повторного рендеринга после масштабирования (аналогично страницам pdf, но намного быстрее), но не занимает больше памяти, чем он необходимо отображать изображение гораздо меньшего размера или страницу PDF.

Кто-нибудь знает, что происходит за кулисами, и если это? Возможно совместить низкое использование памяти CGContextDrawImage с высокой производительностью UIImageView с помощью Quartz Framework.

5
задан STW 7 August 2013 в 13:51
поделиться