Objective c 目标C,NSMutableDictionary引用计数
我不确定这段代码是否有效…我应该用这样的代码来代替这个吗Objective c 目标C,NSMutableDictionary引用计数,objective-c,nsmutabledictionary,Objective C,Nsmutabledictionary,我不确定这段代码是否有效…我应该用这样的代码来代替这个吗 NSMutableDictionary *attrs = [nodeAttributes objectForKey:UUID];//nodeAttributes is NSMutalbleDictionary if (attrs == nil) { attrs = [[NSMutableDictionary alloc] init]; [nodeAttributes setObject:
NSMutableDictionary *attrs = [nodeAttributes objectForKey:UUID];//nodeAttributes is NSMutalbleDictionary
if (attrs == nil) {
attrs = [[NSMutableDictionary alloc] init];
[nodeAttributes setObject:attrs forKey:UUID];
[attrs release];
}
我不确定setObject方法是否会增加引用计数…在第一种情况下,保留计数将增加。这是正确的方法。setObject将发送一条保留消息,因此您无需这样做。对象负责声明其拥有的物品的所有权。所以是的,
setObject:forKey:
将保留。苹果公司对此进行了详细解释(但仍然非常简短)。NSMutableDictionary的setObject
将保留该对象(这是),因此第一位代码是正确的,第二位代码是泄漏的。就风格而言,读者可以更清楚地了解以下内容:
NSMutableDictionary *attrs = [nodeAttributes objectForKey:UUID];//nodeAttributes is NSMutalbleDictionary
if (attrs == nil) {
attrs = [[NSMutableDictionary alloc] init];
[nodeAttributes setObject:[attrs retain] forKey:UUID];
[attrs release];
}
虽然内存管理是明智的,但您的方法可能更好,因为它避免(隐式地)使用自动释放
if (attrs == nil) {
attrs = [NSMutableDictionary dictionary];
[nodeAttributes setObject:attrs forKey:UUID];
}