【发布时间】:2011-07-14 03:04:10
【问题描述】:
我正在尝试解析一个 xml 文件。我正在创建一个字典数组,然后使用这些创建的数组创建带有数组的数组。当我将我的 nsdictionary 复制到数组中时,我遇到了内存泄漏。任何人都可以请帮助! 谢谢
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
if(parseMode == 1){
// NSLog(@"found this start tag: %@", elementName);
if ([elementName isEqualToString:@"Group"]) {
[tInState removeAllObjects];
}
else if ([elementName isEqualToString:@"State_Name"]) {
tData = [[NSMutableDictionary alloc] init];
xmlItem = 0;
}
else if ([elementName isEqualToString:@"T_Name"]) {
xmlItem = 1;
}
else if ([elementName isEqualToString:@"T_Address"]) {
xmlItem = 2;
}
else if ([elementName isEqualToString:@"T_Ph"]) {
xmlItem = 3;
}
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if (parseMode == 1) {
// NSLog(@"found this end tag: %@", elementName);
if([elementName isEqualToString:@"T_Info"]) {
[tInState addObject:[tData copy]];
[tData autorelease];
}
else if ([elementName isEqualToString:@"Group"]) {
[tlist addObject:tInState];
}
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if (parseMode == 0) {
[self addToStateList:string];
}
else if (parseMode == 1) {
// NSLog(@"found this character: %@", string);
switch (xmlItem) {
case 0:
[tData setValue:string forKey:@"State_Name"];
break;
case 1:
[tData setValue:string forKey:@"T_Name"];
break;
case 2:
[tData setValue:string forKey:@"T_Address"];
break;
case 3:
[tData setValue:string forKey:@"T_Ph"];
break;
default:
break;
}
}
}
这里的 tInState,tInState 是 nsmutablearray,我在 viewdidload 函数中分配并在 releaseMemory 中释放。我浏览了 NScopy 文件,它说当我们使用副本时,所有权被转移。我正在释放我所有的数组,为什么它仍然会导致问题??
请帮忙。 谢谢
【问题讨论】:
-
我错过了清除 didendelement 中的行我没有释放 nsdictionary(tdata)。如果我释放它只会崩溃。
-
请将代码粘贴进去并去掉截图(难以阅读)
-
考虑转换为 ARC,这些问题就会消失。
标签: iphone ios memory-leaks