Objective C,NSMutableDictionary引用计数

时间:2011-03-14 01:04:17

标签: objective-c nsmutabledictionary

    NSMutableDictionary *attrs = [nodeAttributes objectForKey:UUID];//nodeAttributes is NSMutalbleDictionary
    if (attrs == nil) {
         attrs = [[NSMutableDictionary alloc] init];
         [nodeAttributes setObject:attrs forKey:UUID];
         [attrs release];
    }

我不确定这段代码是否有效......我应该有这样的东西而不是这个

    NSMutableDictionary *attrs = [nodeAttributes objectForKey:UUID];//nodeAttributes is NSMutalbleDictionary
    if (attrs == nil) {
         attrs = [[NSMutableDictionary alloc] init];
         [nodeAttributes setObject:[attrs retain] forKey:UUID];
         [attrs release];
    }

我不确定setObject方法是否会增加引用计数...

4 个答案:

答案 0 :(得分:4)

NSMutableDictionary的setObject将保留对象(这是documented),因此第一位代码是正确的,第二位是泄漏的。风格方面,读者可能会更清楚地做到以下几点:

if (attrs == nil) {
     attrs = [NSMutableDictionary dictionary];
     [nodeAttributes setObject:attrs forKey:UUID];
}

虽然内存管理明智,但您的方法可能更好,因为它避免(隐式)使用自动释放。

答案 1 :(得分:2)

保留计数将在第一种情况下递增。这是正确的方法。

答案 2 :(得分:2)

对象负责声明他们拥有的东西的所有权。是的,setObject:forKey:将保留。这在Apple的memory management guide中有详细解释(但仍然非常简短)。

答案 3 :(得分:0)

setObject将发送一条保留消息,因此您无需这样做。