在iOS上使用NSMutableDictionary进行内存管理

时间:2012-02-04 07:59:00

标签: objective-c memory-management nsmutabledictionary retaincount

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

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

问题是,我怎么能保证没有内存泄漏?我在dealloc中直接使用[mutableDict release]是好的吗? mutableDict的retainCount是否等于其对象的所有retainCounts(保留的数组)的总和?

3 个答案:

答案 0 :(得分:7)

  1. 阅读Cocoa Memory Management Guide,没有任何借口。
  2. 数组获得手册retain的+1和另外+1,因为字典会保留它。那是泄密。遗漏你的retain即可。
  3. dealloc中发布字典是正确的。如果没有对字典的其他强引用,它将被释放,释放其中包含的所有对象。这意味着您的阵列也将被释放,这可能就是您想要的。
  4. Forget about retainCount
  5. 真的忘了......那是什么?

答案 1 :(得分:0)

你可以:

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

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

答案 2 :(得分:0)

您不需要保留,因为setObject已经为您执行了保留。只要你愿意,你就可以在你的字典上保留。

请参阅Reference