我正在使用ARC和NSCache,它是在我的应用代理中创建和存储的。然后我通过app委托从控制器调用它。 NSCache存储从URL加载的图像,内存使用量非常快。当我检查分析器的实际内存使用情况时,我的应用程序甚至达到了320 MB的内存使用量,但在分配时它说它刚刚分配了20-30 MB。
在我的app委托上,我按如下方式设置缓存(它是一个ivar):
cache = [[NSCache alloc] init];
[cache setCountLimit:100];
[cache setTotalCostLimit:1500000];
[cache setEvictsObjectsWithDiscardedContent:YES];
我实现了一个按钮来试验NSCache,当我点击它时,它会调用:
- (IBAction)eraseCache:(id)sender {
[[appDelegate cache] removeAllObjects];
}
在分析器上,使用的内存不会下降,但它实际上会再次开始获取图像,因此我知道删除的对象。如何使用ARC随意释放此内存使用情况?如何获取缓存的大小以了解何时释放它?
答案 0 :(得分:0)
在ARC中,一旦没有指向对象的指针,它就会自动释放。如果您对该对象的唯一指针位于缓存中,则它们已被释放。
请注意,您实际上不必删除对象;如果将指针指定给一个新对象(结果是它不再指向旧对象),则取消分配旧对象。
Ex:
NSArray *array = [NSArray new];
array = [NSArray new]; //the original array gets deallocated because nothing points to it.
来自NSCache类参考:
NSCache类包含各种自动删除策略 确保它不会占用太多的系统内存。该 如果需要内存,系统会自动执行这些策略 其他应用。调用时,这些策略会删除一些项目 从缓存中,最小化其内存占用。