我应该释放添加到从文件初始化的字典中的对象吗?

时间:2012-08-06 20:00:46

标签: objective-c ios

我正在从.plist中加载字典,如下所示:

switches = [NSMutableDictionary dictionaryWithContentsOfFile:
                    [[NSBundle mainBundle] pathForResource:@"Switches" ofType:@"plist"]];
[switches retain];

现在我需要添加一个新条目(这是另一个字典)。要创建字典并添加它,我这样做:

    NSMutableDictionary *newObject = [[NSMutableDictionary alloc]init];
    [switches setObject:newObject forKey:@"MyNewObject"];

我是否必须发布newObject?我的意思是,我认为无论如何switches会照顾它,对吗?

2 个答案:

答案 0 :(得分:2)

是的,您应该在将newObject添加到词典后释放它。因为字典会为保留计数添加+1,并且当您使用“alloc”作为对象初始化的一部分时,您的保留计数为1。

NSMutableDictionary *newObject = [[NSMutableDictionary alloc]init];
    [switches setObject:newObject forKey:@"MyNewObject"];
[newObject release];

NSMutableDictionary *newObject = [[[NSMutableDictionary alloc]init]autorelease];
    [switches setObject:newObject forKey:@"MyNewObject"];

NSMutableDictionary *newObject = [NSMutableDictionary dictionary];
    [switches setObject:newObject forKey:@"MyNewObject"];

也可以接受

答案 1 :(得分:1)

字典会保留您放入其中的对象(所有可可集合都会这样做),因此您需要释放newObject

或者您可以将其创建为自动释放的对象,如下所示:

NSMutableDictionary *newObject = [NSMutableDictionary dictionary];

这样您就不需要明确释放newObject