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