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