Ios 将NSMutableDictionary设置为nil是否会释放对所有它的引用';什么内容?
假设我有一个Ios 将NSMutableDictionary设置为nil是否会释放对所有它的引用';什么内容?,ios,objective-c,caching,memory-management,nsmutabledictionary,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]]; }
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]];
}
NSMutableDictionary*dict=[NSMutableDictionary];
对于(int i=0;i,如果没有对字典的其他引用
dict = nil;
将导致dict解除分配。解除分配方法将被调用-[NSMutableDictionary dealloc]。并且在此方法中,将释放对其内容的所有引用
您还可以调用NSMutableDictionary的
- (void)removeAllObjects;
方法
我还建议您看看NSCache类——它已经处理了didReceiveMemoryWarning本身:
NSCache对象是一个类似容器或缓存的集合
存储键值对,类似于NSDictionary类
通常会合并缓存以临时存储具有瞬态特性的对象
创建成本高昂的数据。重用这些对象可以提供
性能优势,因为它们的价值不必
已重新计算。但是,对象对应用程序并不重要
如果内存紧张,则可以丢弃。如果丢弃,则其值
需要时必须重新计算
和NSMapTable:
NSMapTable是以NSDictionary为模型的可变集合,但
提供不同的选项
你能想出一种方法来测试它吗?你能测试它吗?谢谢。我想我会使用NSCache来代替。当你将字典设置为nil时,字典中的所有项的保留计数都会减少一。如果其他人仍然持有字典中某项的引用,则此项不会被释放。因为它仍然具有保留计数。