2

我有一个 NSMutableDictionary ,其键是对象名称的第一个字母。该视图类似于 iphone 上的“联系人”选项卡。此外,用户可以在列表中选择单个对象。

在代码中,我找到每个选定的对象以进一步处理它们。

NSMutableArray *objectsToAdd = [[NSMutableArray alloc] init];
NSMutableArray *array      = nil;

for (NSString *key in self.nameIndex) {

    array = (NSMutableArray *)[searchedNameDictionary valueForKey:key];    
    for (Objects *eachObject in array) {
        if (eachObject.objectIsSelected){
            [objectsToAdd addObject:eachObject];
        }
    }           
}
[array release];

-(void)dealloc()
{
    [searchedNameDictionary release];
}

该应用程序在我释放 searchedNameDictionary 的地方崩溃,并显示正在引用已释放对象的消息。

现在,如果在上面的代码中,我删除 [array release] 应用程序工作正常。

我的问题是释放“数组”实际上是否释放了 searchedNameDictionary 中的对象,这似乎正在发生。

不释放数组会导致内存泄漏吗?

4

2 回答 2

5

release除非它们来自allocorcopy方法,否则不应返回对象。

autoreleased否则,如果您想retain在收到它后立即将其保留在您的周围,则返回的对象是相反的。

于 2010-06-29T16:02:33.587 回答
2

array = (NSMutableArray *)[searchedNameDictionary valueForKey:key];

这将返回一个自动释放的对象,因此您不需要释放它。

您的代码也存在其他一些问题,但主要是样式问题。摆脱 [array release] 就可以解决这个问题。

于 2010-06-29T16:01:26.277 回答