Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将NSMutableDictionary设置为nil是否会释放对所有它的引用';什么内容?_Ios_Objective C_Caching_Memory Management_Nsmutabledictionary - Fatal编程技术网

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时,字典中的所有项的保留计数都会减少一。如果其他人仍然持有字典中某项的引用,则此项不会被释放。因为它仍然具有保留计数。