img_data_lock iphone - изображение называется против изображения с содержимым файла - PullRequest
3 голосов
/ 25 мая 2010

Я замечаю скачок памяти, и ответственный абонент, как указано в инструментах, является img_data_lock, а ответственная библиотека - CoreGraphics.

Я читал, что проблема связана с загрузкой кэшированных и не кэшированных изображений ( Разница между [UIImage imageNamed ...] и [UIImage imageWithData ...]? ) В настоящее время мое приложение загружает серию изображений через imageNamed

замена вызова imageNamed на imageWithContentsOfFile, кажется, решает проблему.

У кого-нибудь есть какая-нибудь информация о звонящем img_data_lock? Зачем кому-то использовать imageNamed, если это отнимает столько памяти?

1 Ответ

13 голосов
/ 15 февраля 2011

Методы UIImage imageNamed: и imageWithContentsOfFile: делают немного разные вещи. imageNamed загружает изображение в специальный системный кеш, а затем будущие вызовы с этим путем к изображению будут возвращать изображение в кеш, а не перезагружать его с диска. imageWithContentsOfFile просто загружает изображение по указанному вами пути, но не выполняет кэширование. Многократные обращения к imageWithContentsOfFile для одного и того же изображения приведут к нескольким копиям в памяти.

iOS, похоже, не очищает кэш (ну или вообще, я не уверен), когда выдается предупреждение о памяти, что может привести к завершению работы приложений из-за нехватки свободной памяти. UIImages, загруженные с imageWithContentsOfFile, отвечают на предупреждения памяти, удаляя их изображения и перезагружая их по мере необходимости, что может объяснить, почему ваш скачок памяти исчез.

Кроме того, кажется, что кэш в симуляторе гораздо больше, чем на реальном оборудовании, проблемы и сбои, которые я видел с UIImages с использованием imageNamed, произошли только на устройстве. Будьте осторожны при тестировании на симуляторе!

Единственная причина, по которой я могу использовать imageNamed одно и то же изображение, многократно используется в ваших представлениях. Кроме того, вы можете реализовать свой собственный кэш изображений и получить преимущества, связанные с кэшем, которым вы можете управлять, как описано здесь: http://www.alexcurylo.com/blog/2009/01/13/imagenamed-is-evil/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...