Memory leaks 使用字典从数组中提取内存
我有一个函数getAllData,它返回一个带有字典的数组Memory leaks 使用字典从数组中提取内存,memory-leaks,ios4,memory-management,Memory Leaks,Ios4,Memory Management,我有一个函数getAllData,它返回一个带有字典的数组 - (NSArray *)getAllData { NSMutableArray *result = [[NSMutableArray alloc] init]; NSArray *data = [skiResorts sortedArrayUsingFunction:comparator context:NULL]; NSString *currentLetter = @"A&qu
- (NSArray *)getAllData {
NSMutableArray *result = [[NSMutableArray alloc] init];
NSArray *data = [skiResorts sortedArrayUsingFunction:comparator context:NULL];
NSString *currentLetter = @"A";
NSMutableArray *array = [[NSMutableArray alloc] init] ;
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init] ;
if ([data count] > 0) {
for (SkiResort *resort in data) {
if ([resort.name hasPrefix:currentLetter]) {
// Same letter as before.
// Add current SkiResort to temporary array.
[array addObject:resort];
} else {
// New letter.
// Add previous header/row data to dictionary.
[dict setValue:currentLetter forKey:@"header"];
[dict setValue:array forKey:@"row"];
// Add dictionary to final result array.
[result addObject:dict];
// Startover ...
[array removeAllObjects];
[dict removeAllObjects];
// Prepare for next letter.
currentLetter = [resort.name substringToIndex:1];
// Add current SkiResort to temporary array.
[array addObject:resort];
}
}
// Add previous header/row data to dictionary.
[dict setValue:currentLetter forKey:@"header"];
[dict setValue:array forKey:@"row"];
// Add dictionary to final result array.
[result addObject:dict];
}
[array release];
[dict release];
return [result autorelease];
}
有人能在我的代码中看到明显的内存泄漏吗?我得到了内存泄漏数组、dict和result…在回答之前,我真的应该说,我对这方面的知识非常有限,所以要考虑到这一点。但在我看来,你似乎有一个容器里面的容器。当你为它保留内存时,你必须向后取消它
例如,在容器A中存储n个(B_容器)保留n_B容器和1个容器。要取消保留内存,您需要先取消保留n个B_容器,然后再删除A,否则所有B_容器都将没有引用并在内存中浮动。在回答之前,我确实应该说,我对这方面的知识非常有限,因此请考虑到这一点。但在我看来,你似乎有一个容器里面的容器。当你为它保留内存时,你必须向后取消它
例如,在容器A中存储n个(B_容器)保留n_B容器和1个容器。要取消保留内存,您需要先取消保留n个B_容器,然后再删除A,否则所有B_容器将没有引用并在内存中浮动。从代码中,我必须问:您知道addObject:没有复制对象吗?所以,将值设置为dict,然后将其添加到result,然后从dict中删除所有内容,只会在result中留下一个空字典?我认为您可能想使用其中的“copy”方法来复制数组和字典。或者,更好的是,当您使用类方法之一将字典添加到结果中时,只需创建字典即可 无论如何,因为我看不到任何泄漏,更可能的是,无论谁收到getAllData的结果,随后都会泄漏它。如果出于某种疯狂的原因,你有一个流浪汉:
[[object getAllData] retain];
然后,leaks工具将识别array、dict和result的泄漏,并指向getAllData作为最初创建它们的方法。从代码中,我不得不问:您知道addObject:没有复制对象吗?所以,将值设置为dict,然后将其添加到result,然后从dict中删除所有内容,只会在result中留下一个空字典?我认为您可能想使用其中的“copy”方法来复制数组和字典。或者,更好的是,当您使用类方法之一将字典添加到结果中时,只需创建字典即可 无论如何,因为我看不到任何泄漏,更可能的是,无论谁收到getAllData的结果,随后都会泄漏它。如果出于某种疯狂的原因,你有一个流浪汉:
[[object getAllData] retain];
然后泄漏工具将识别数组、dict和result的泄漏,并指向getAllData作为它们最初创建的方法。Tommy,你让我开心![[object getAllData]retain];->[对象getAllData];汤米,你让我开心![[object getAllData]retain];->[对象getAllData];