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方法是否会增加引用计数...
答案 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将发送一条保留消息,因此您无需这样做。