NSXMLParser утечка памяти метода разбора - PullRequest
0 голосов
/ 17 января 2012

Я не знаю, почему этот метод NSXMLParser parse протекает. Я посмотрел на другой похожий вопрос, но не смог его решить.

Вот мой код.

 - (void)parseXMLFileAtURL {
self.results = [[NSMutableArray alloc] init];

NSURL *xmlURL = [NSURL URLWithString:@"http://www.dukascopy.com/swiss/video/rss/"];
    NSData *dataXml = [[NSData alloc] initWithContentsOfURL:xmlURL];
NSXMLParser *MyrssParser = [[NSXMLParser alloc] initWithData:dataXml];
[dataXml release];

[MyrssParser setDelegate:self];


[MyrssParser setShouldProcessNamespaces:NO];
[MyrssParser setShouldReportNamespacePrefixes:NO];
[MyrssParser setShouldResolveExternalEntities:NO];

[MyrssParser parse]; // memory leak here
MyrssParser.delegate=nil;
[MyrssParser release];
if(!imagesArray)
{
    imagesArray = [[NSMutableArray alloc] initWithCapacity:[self.results count]];
    for(int i=0;i<[results count];i++)
    {
        UIImage *image = [UIImage imageNamed:@"nophoto.png"];
        [imagesArray addObject:image];
        bImgExist[i] = NO;
    }
}

  }

Даже после выпуска моего объекта NSXMLParser прибор все еще показывает утечку памяти. Что мне здесь не хватает ..

1 Ответ

3 голосов
/ 17 января 2012
self.results = [[NSMutableArray alloc] init];

Свойства вступают во владение (в соответствии с их декларациями) присвоенных им значений. Таким образом, массив, для которого вы устанавливаете это свойство, сохраняется self (я предполагаю, что это свойство либо retain, либо copy здесь), но уже имеет счет сохранения +1 от своей инициализации.

Измените строку на:

self.results = [NSMutableArray array];

И утечка памяти должна устранить.

...