所以,让我说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
实例分配的所有内存?
答案 0 :(得分:1)
如果没有其他对字典的引用
dict = nil;
将导致dict释放。将释放释放方法 - [NSMutableDictionary dealloc]。在此方法中,将发布对其内容的所有引用。
你也可以调用NSMutableDictionary的
- (void)removeAllObjects;
而不是方法。
我还建议您查看NSCache类 - 它已经处理了didReceiveMemoryWarning本身:
NSCache对象是类似于集合的容器或缓存 存储键值对,类似于NSDictionary类。开发商 通常包含缓存来临时存储具有瞬态的对象 创建成本高昂的数据。重用这些对象可以提供 性能优势,因为他们的价值观不一定如此 重新计算。但是,对象对应用程序并不重要 如果记忆力很紧,可以丢弃。如果丢弃,他们的价值观 必要时必须重新计算。
和NSMapTable:
NSMapTable是一个以NSDictionary为模型的可变集合 提供不同的选择。