Хорошо известно, что UIImage кэширует свои данные изображения, когда изображение загружается с использованием метода imageNamed:
.
Из яблочной документации:
https://developer.apple.com/documentation/uikit/uiimage/1624146-imagenamed
imageNamed:
Обсуждение : Этот метод выглядит в
система кэширует для объекта изображения с
указанное имя и возвращает, что
объект, если он существует. Если соответствие
объект изображения еще не находится в
кеш, этот метод загружает изображение
данные из указанного файла кеши
это , а затем возвращает результат
объект.
Из-за этого после загрузки нескольких изображений с помощью imageNamed:
я заметил значительное увеличение использования памяти, а также то, что память поддерживалась даже после освобождения контроллера, который загружал изображения. (по крайней мере, он снова не увеличился, когда я выделил тот же контроллер)
Это заставило меня задуматься, есть ли какой-нибудь способ очистить кэш, используемый UIImage программно в любой момент времени жизненного цикла моего приложения, или даже контролировать некоторые параметры кеша (например, максимальный объем памяти, который он может использовать, например)
Я знаю, что мог бы легко решить эту проблему, используя initWithData
, imageWithData
, imageWithContentsOfFile
или любой другой инициализатор вместо imageNamed
, но такое поведение кэша желательно при использовании нескольких изображений, например внутри UITableView
.
Есть мысли о том, как этого добиться?
EDIT:
После некоторых ответов я просто хочу прояснить, что существует огромный разрыв между необходимостью что-то делать и возможностью что-то делать. Как я уже говорил, я знаю, что операционная система заботится об этом кеше для меня, я просто пытаюсь увидеть ограничения, налагаемые iOS SDK.