将NSMutableDictionary设置为nil是否会释放对其所有内容的引用?

时间:2014-09-20 11:06:21

标签: ios objective-c caching memory-management nsmutabledictionary

所以,让我说NSMutableDictionary充满了这样的对象:

NSMutableDictionary* dict = [NSMutableDictionary dictionary];
for (int i=0; i<10; i++) {
    someClass* tmp = [[someClass alloc] init];
    [dict setObject:tmp forKey:[NSString stringWithFormat:@"%i", i]];
}

如果我将字典本身设置为等于nil,那么它是否会释放我放入其中的所有对象(从而为每个对象释放分配的内存)?

我想基本上使用NSMutableDictionary作为缓存,每当我的应用程序收到从系统到didReceiveMemoryWarning的调用时,我想清除此缓存并释放其中的每个对象。< / p>

将字典设置为nil是否足够,或者我是否必须调用某种方法来清除数据并释放通过创建someClass实例分配的所有内存?

1 个答案:

答案 0 :(得分:1)

如果没有其他对字典的引用

dict = nil;

将导致dict释放。将释放释放方法 - [NSMutableDictionary dealloc]。在此方法中,将发布对其内容的所有引用。

你也可以调用NSMutableDictionary的

- (void)removeAllObjects;
而不是

方法。

我还建议您查看NSCache类 - 它已经处理了didReceiveMemoryWarning本身:

  

NSCache对象是类似于集合的容器或缓存   存储键值对,类似于NSDictionary类。开发商   通常包含缓存来临时存储具有瞬态的对象   创建成本高昂的数据。重用这些对象可以提供   性能优势,因为他们的价值观不一定如此   重新计算。但是,对象对应用程序并不重要   如果记忆力很紧,可以丢弃。如果丢弃,他们的价值观   必要时必须重新计算。

和NSMapTable:

  

NSMapTable是一个以NSDictionary为模型的可变集合   提供不同的选择。