Мое приложение загружает изображения с URL-адреса в определенном порядке, и пользователь просматривает их. У меня есть приложение, которое предварительно загружает следующее изображение и сохраняет старые изображения в кеше.
Этот кеш в основном представляет собой NSMutableDictionary с ключами, связанными с идентификатором изображения. Каждый объект в кеше также является NSDictionary с URL-адресом, URL-адресом изображения, заголовком и объектом NSData. Когда я загружаю изображение, я добавляю новый объект словаря в кеш с этими элементами. Я храню объект NSData следующим образом: NSData * imgData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: imageurl]]; Затем я добавляю этот объект к объекту дочернего словаря.
Это, очевидно, занимает большой объем оперативной памяти после того, как большое количество фотографий хранится и кешируется, поэтому я отвечаю на предупреждение памяти, очищая весь кеш. Проблема в том, что бы я ни пробовал, оперативная память не освобождается. Объекты исчезают (как и должны), но не возвращают оперативную память. Я пробовал делать следующее:
- Цикл через словарь кеша, освобождение объекта данных в дочернем словаре, затем, когда все элементы пройдены, удалите все дочерние объекты словаря кеша.
- Цикл через словарь кеша, освобождение дочернего словаря, удаление всех объектов по завершении
- Даже удаление всех объектов, затем освобождение всего объекта кеша (затем его воссоздание, потому что его все еще нужно использовать)
- И другие случайные комбинации освобождения, удаления и т. Д.
Проблема в том, что НИЧТО из того, что я пробовал, не освободило ОЗУ. Что-то я делаю неправильно, освобождая память объектов NSData?