NSCache,removeAllObjects会释放内存使用情况吗?我正在使用ARC

时间:2012-07-27 16:20:26

标签: objective-c memory-management nscache

我正在使用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随意释放此内存使用情况?如何获取缓存的大小以了解何时释放它?

1 个答案:

答案 0 :(得分:0)

在ARC中,一旦没有指向对象的指针,它就会自动释放。如果您对该对象的唯一指针位于缓存中,则它们已被释放。

请注意,您实际上不必删除对象;如果将指针指定给一个新对象(结果是它不再指向旧对象),则取消分配旧对象。

Ex:
NSArray *array = [NSArray new];
array = [NSArray new]; //the original array gets deallocated because nothing points to it.

来自NSCache类参考:

  

NSCache类包含各种自动删除策略   确保它不会占用太多的系统内存。该   如果需要内存,系统会自动执行这些策略   其他应用。调用时,这些策略会删除一些项目   从缓存中,最小化其内存占用。