我正在构建数据存储,以跟踪存储在我的应用中的所有远程图像。我决定使用一个单例来跟踪所有被引用的图像。
我记得,iOS会根据使用的新近程度自动开始从内存中清除对象,无论是否被当前视图控制器引用,等等。但是,如果我将这些图像存储在数据存储中,那么这些对象始终是被商店本身引用。我的内存管理解决方案是跟踪上次调用图像的时间,并对存储在数据存储中的图像的#和大小保持某种形式的限制,并根据年龄清除最旧的图像。
这个解决方案是好的吗?为什么或者为什么不?我应该依赖Apple的自动内存管理,还是让我自己的经理好吗?
进一步说明:
以下是从我的一个视图控制器请求图像最终会查找我的解决方案的方法:
[[HollerImages store]getImageWithUrl:@"https://www.google.com/logos/classicplus.png"
completionBlock:^(BOOL succeeded, UIImage *image){
if( succeeded ){
//Update the UIImageView with the returned image
}
}];
然后,商店将管理应用程序中当前正在引用的图像数量,并在我们达到某个预定义的限制时自动取消引用旧图像。想法?
答案 0 :(得分:0)
答案 1 :(得分:0)
处理内存问题的最简单方法是实现-(void)didReceiveMemoryWarning
函数并清除所有缓存数据。
您所说的是实现过期缓存。您可以在每次插入时计算数据结构中的元素,并在达到限制时从头部删除元素(前提是它是有序数据结构)。前一种解决方案更容易,并且在大多数情况下都有效。