Я пытаюсь устранить утечки памяти из моего проекта, но я застрял в двух ситуациях на несколько дней.
- (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 * повторно используется для каждого элемента.
Есть предложения?Заранее спасибо:)