Objective c 使用iOS上的NSMutableDictionary进行内存管理

Objective c 使用iOS上的NSMutableDictionary进行内存管理,objective-c,memory-management,nsmutabledictionary,retaincount,Objective C,Memory Management,Nsmutabledictionary,Retaincount,我将手动管理NSMutableDictionary的内存,而不使用自动释放。mutableDictionary中的每个对象都是一个NSArray,每次我在mutableDictionary中添加一个数组时,我将使用 NSArray *newArray = [[NSArray arrayWithArray:anArray] retain] [mutableDict setObject:newArray forKey:@"aKey"]; 问题是,我怎样才能保证没有内存泄漏?我在dealloc中直接

我将手动管理NSMutableDictionary的内存,而不使用自动释放。mutableDictionary中的每个对象都是一个NSArray,每次我在mutableDictionary中添加一个数组时,我将使用

NSArray *newArray = [[NSArray arrayWithArray:anArray] retain]
[mutableDict setObject:newArray forKey:@"aKey"];
问题是,我怎样才能保证没有内存泄漏?我在dealloc中直接使用[mutableDict release]是件好事?mutableDict的重新计数是否等于其对象(那些保留数组)的所有重新计数之和?

您可以:

NSArray *newArray = [NSArray arrayWithArray:anArray];
[mutableDict setObject:newArray forKey:@"aKey"];//mutableDict will auto retain newArray.

您可以使用仪器(泄漏)查看您的项目有多少泄漏。

您不需要保留,因为setObject已经为您执行了保留。你只要把字典里的单词保留多久就可以了

  • 读这本书,不要找借口
  • 数组为手动
    retain
    获得+1,另一个为+1,因为字典保留了它。那是个漏洞。省去你的
    保留
    ,一切都会好起来的
  • dealloc
    中释放字典是正确的。如果没有其他对字典的强引用,它将被释放,释放其中包含的所有对象。这意味着您的阵列也将被释放,这可能是您想要的
  • 真的忘了…那是什么

  • 我要加5。真的忘了RetainCount了吗?确实是这样,我没有意识到setObject forKey方法会自动为口述保留对象,所以没关系。谢谢