несколько месяцев назад я нашел действительно классный пример кода с сайта Apple. Пример называется "LargeImageDownsizing". Замечательно то, что он многое объясняет о том, как изображения считываются из ресурсов и затем отображаются на экране.
Копаясь в этом коде, я обнаружил кое-что, что меня немного беспокоит. Изображение уменьшенного размера передается в представление, имеющее CATiledLayer, но не предоставляя фрагмент изображения на каждой плитке для повышения производительности памяти, он просто устанавливает размер плитки, а затем загружает изображение (я упрощаю, чтобы перейти к концепции ).
Итак, мой вопрос в основном заключается в том, почему? Зачем использовать CATiledLayer, если он не подается правильно, они могли бы использовать обычный UIImageView...
Поэтому я сделал несколько тестов, чтобы понять, был ли я прав . Модифицируя код, просто добавьте представление прокрутки с представлением изображения в качестве подпредставления и ответьте на представление делегата прокрутки для масштабирования. К таким выводам я пришел, тестируя устройство и сим:
- -Воздействие на память и занимаемая площадь точно такие же, даже во время операции масштабирования и прокрутки, и это меня совсем не удивляет, изображение распаковывается в памяти
- - Профиль времени говорит, что тайловое представление требует больше времени для рисования во время операции масштабирования прокрутки вместо uiimageview, и это меня совсем не удивляет снова, uiimageview уже нарисован
- -Если я отправлю предупреждение о памяти, между двумя решениями ничего не изменится (только на симе)
- - Тестирование производительности Core Animation дало те же результаты при частоте 60 кадров в секунду
Так в чем же дело между этими двумя представлениями/слоями, почему я должен выбрать один вместо другого в этом конкретном случае? UIImageView, кажется, выигрывает битву.
Я надеюсь, что кто-то может помочь мне понять это.