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