Как избежать вызовов png_read_filter_row и transform_premul_argb_fn в Core Graphics? - PullRequest
1 голос
/ 31 мая 2011

У меня проблемы с производительностью в приложении. Я назначаю UIImageView свойству backgroundView объекта UITableViewCell. Инструмент Time Profiler говорит мне, что я провожу большую часть своего времени здесь:

enter image description here

В моем табличном представлении есть полупрозрачные ячейки, позволяющие фону просвечивать. Я знаю, что это не хорошо. Но из того, что я могу сказать от Профилировщика, это не узкое место, верно?

png_read_filter_row звучит так, как будто происходит какая-то дорогая фильтрация.

Кроме того, на transform_premul_argb_fn потрачено 10,6% ... это похоже на какое-то масштабирование. Мои изображения не масштабируются вообще. Я использую их естественным образом (то есть, если дисплею нужно 200 x 100, он получает 200 x 100. Если это сетчатка, он получает версию 400 x 200).

И, наконец, 6,7% на gzopen, что звучит странно. Мои изображения находятся в каталоге «Документы», а не в заархивированном пакете приложений.

Может быть, кто-то с глубокими знаниями Core Graphics может сказать, что означают эти вызовы и как их избежать?

1 Ответ

4 голосов
/ 31 мая 2011

Убедитесь, что ваши изображения распакованы после загрузки.Используйте следующий код из http://markmail.org/message/vav7a5khncak2u3h

UIGraphicsBeginImageContext(image.size);
[image drawAtPoint:CGPointZero blendMode:kCGBlendModeCopy alpha:1.0];
UIImage *decompressed = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...