0

我正在使用在我的应用程序委托上创建并存储的 ARC 和 NSCache。然后我通过应用程序委托从控制器调用它。NSCache 在从 url 加载图像时存储图像,并且内存使用量上升得非常快。当我检查分析器的实际内存使用情况时,我的应用程序甚至达到了 320 MB 的内存使用情况,但在分配时它说它刚刚分配了 20-30 MB。

在我的应用程序委托上,我将缓存设置如下(它是一个 ivar):

cache = [[NSCache alloc] init];
[cache setCountLimit:100];
[cache setTotalCostLimit:1500000];
[cache setEvictsObjectsWithDiscardedContent:YES];

我实现了一个按钮来试验 NSCache,当我点击它时,它会调用:

- (IBAction)eraseCache:(id)sender {
    [[appDelegate cache] removeAllObjects];
}

在分析器上,使用的内存没有下降,但它实际上又开始获取图像,所以我知道删除的对象。如何使用 ARC 随意释放此内存使用量?如何获取缓存的大小以知道何时释放它?

4

1 回答 1

0

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

请注意,您实际上不必删除对象;如果将指针分配给新对象(结果它不再指向旧对象),则旧对象将被释放。

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

从 NSCache 类参考:

NSCache 类包含各种自动删除策略,确保它不会使用过多的系统内存。如果其他应用程序需要内存,系统会自动执行这些策略。调用时,这些策略会从缓存中删除一些项目,从而最大限度地减少其内存占用。

于 2012-07-27T16:25:05.307 回答