【问题标题】:Memory management with NSMutableDictionary on iOS在 iOS 上使用 NSMutableDictionary 进行内存管理
【发布时间】:2012-02-26 16:53:56
【问题描述】:

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

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

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

【问题讨论】:

    标签: objective-c memory-management nsmutabledictionary retaincount


    【解决方案1】:
    1. 阅读Cocoa Memory Management Guide,没有任何借口。
    2. 该数组为您的手册retain 获得+1 和另一个+1,因为字典保留了它。那是一个泄漏。留下你的retain 就可以了。
    3. 在您的dealloc 中释放字典是正确的。如果没有对字典的其他强引用,它将被释放,释放其中包含的所有对象。这意味着您的数组也将被释放,这可能是您想要的。
    4. Forget about retainCount.
    5. 真的忘了……那是什么?

    【讨论】:

    • 我会加 5。真的忘了retainCount
    【解决方案2】:

    你可以:

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

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

    【讨论】:

    • 当然是,我没有意识到 setObject forKey 方法会自动为字典保留对象,所以没关系。谢谢。
    【解决方案3】:

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

    Reference

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多