【发布时间】:2011-03-01 14:47:21
【问题描述】:
我正在尝试消除我的项目中的内存泄漏,但我现在被困在两种情况下好几天了。
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
if (currentElement) {
[currentElement release];
currentElement = nil;
}
currentElement = [elementName copy];
if ([elementName isEqualToString:@"item"]) {
item = [[NSMutableDictionary alloc] init]; //leak #1
// DOING OTHER STUFF....
//......................
}
}
/*****************************************************************************/
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"item"]){
[item setObject:currentTitle forKey:@"title"]; // leak #2
[item setObject:currentLink forKey:@"link"]; //leak #3
[bucket addObject:[item copy]]; // NSMutableArray *bucket
}
}
对于泄漏 #1,我尝试在内存分配之前释放该项目,但如果我这样做,应用程序会崩溃。 (我的意思是,就在item = [[NSMutableDictionary alloc] init]; 之前,我使用了
if (item){
[item release];
item=nil;
}
在我的 dealloc() 方法中,我也有[item release];
对于泄漏#2 和#3,我不知道发生了什么。 注意:这2个方法由xml解析器在解析XML文件时调用,每次读取一个元素。也就是说,NSMutableDictionary * item 被重复用于每个元素。
有什么建议吗?提前谢谢你:)
【问题讨论】:
标签: objective-c xcode memory-leaks