0

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

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

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

4

3 回答 3

7
  1. 阅读Cocoa 内存管理指南,没有任何借口。
  2. 该数组为您的手册获得 +1retain和另一个 +1,因为字典保留了它。那是泄漏。离开你的retain,它会没事的。
  3. 释放你的字典dealloc是正确的。如果没有对字典的其他强引用,它将被释放,释放其中包含的所有对象。这意味着您的数组也将被释放,这可能是您想要的。
  4. 忘了retainCount
  5. 真的忘记了……那是什么?
于 2012-02-04T08:04:26.513 回答
0

你可以:

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

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

于 2012-02-04T08:02:50.337 回答
0

您不需要保留,因为 setObject 已经为您完成保留。只要您愿意,您只需将保留保留在您的字典中即可。

参考

于 2012-02-04T08:03:26.397 回答