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