Iphone 我应该释放从[NSMutableDictionary ValueForKey:]返回的数组吗
我有一个NSMutableDictionary,其中键是对象名称的第一个字母表。该视图类似于iphone上的“联系人”选项卡。此外,用户还可以选择列表中的单个对象 在代码中,我找到每个选定的对象以进一步处理它们Iphone 我应该释放从[NSMutableDictionary ValueForKey:]返回的数组吗,iphone,nsmutabledictionary,Iphone,Nsmutabledictionary,我有一个NSMutableDictionary,其中键是对象名称的第一个字母表。该视图类似于iphone上的“联系人”选项卡。此外,用户还可以选择列表中的单个对象 在代码中,我找到每个选定的对象以进一步处理它们 NSMutableArray *objectsToAdd = [[NSMutableArray alloc] init]; NSMutableArray *array = nil; for (NSString *key in self.nameIndex) { ar
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中的对象吗?这似乎就是正在发生的事情
释放数组是否会导致内存泄漏?数组=(NSMutableArray*)[searchedNameDictionary值forkey:key]
这将返回一个自动释放的对象,因此不需要释放它
您的代码也有一些其他问题,但主要是样式方面的问题。摆脱[array release]后,就这个问题而言,您就可以继续了。您不应该
释放返回的对象,除非它们来自alloc
或复制
方法
返回的对象是自动释放的
,否则,如果您想保留它,您应该在收到它后立即保留它。谢谢,我应该应用内存管理的基本原则。现在对代码更加自信。再次感谢您回答我的问题。是的,删除[array release]解决了问题,正如您所说,我正在释放一个自动释放的对象。从apple文档中,我很难找到一个方法何时返回自动释放的对象,何时不返回。有没有办法知道方法返回的对象是什么类型的(自动删除还是不自动删除)。是的,只需遵循基本规则。如果您使用名称以“alloc”或“new”开头或包含“copy”的方法(例如,alloc、newObject或mutableCopy)创建对象,您将获得对象的所有权,或者如果您向其发送保留消息。您有责任使用“释放”或“自动释放”放弃您拥有的对象的所有权。任何其他时间收到对象时,您都不能释放它。“这适用于所有情况。”。