我的应用程序按特定顺序从URL下载图像,然后用户查看它们。我有应用程序预先载入下一张图像,并将旧图像保存在缓存中。内存未被正确释放?
此缓存基本上是一个NSMutableDictionary,其中的键与图像ID相关联。缓存中的每个对象也是一个带有url,图像URL,标题和NSData对象的NSDictionary。当我下载图片时,我用这些元素将一个新的字典对象添加到缓存中。我像这样存储NSData对象:NSData * imgData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:imageurl]];然后我将这个对象添加到子字典对象。
大量的照片存储和缓存后,这显然占用大量的RAM,所以我通过清除整个缓存来响应内存警告。问题是,无论我尝试过什么,都不会释放RAM。物体消失(像他们应该),但不要退回RAM。我曾尝试执行以下操作:
- 通过缓存词典循环,释放在孩子字典中的数据对象,那么当所有项目都通过循环,清除所有缓存字典子对象。
- 通过缓存词典循环,释放孩子的字典,完成后删除所有对象
- 即使在拆除所有对象,然后释放整个缓存对象(然后重新创建它,因为它仍然需要使用)
- 而释放,删除等
问题的其他随机连击是什么,我都试过了释放RAM。有没有我做错了释放NSData对象的内存?
当您下载数据时,您使用什么样的缓存策略?您是否确认(即泄漏或分配)记忆确实正在泄漏或放弃? – 2010-11-27 08:16:36