2012-01-17 87 views
0

我不知道为什么这个NSXMLParser parse方法泄漏。 我看着其他类似的SO问题,但无法解决它。NSXMLParser解析方法内存泄漏

这是我的代码。

- (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对象仪器仍然显示内存泄漏。 我在这里失踪..

+0

运行分析器,转到Xcode菜单,然后选择Product-> Analyze。发布结果。 – NJones 2012-01-17 20:16:08

回答

3
self.results = [[NSMutableArray alloc] init]; 

属性取得所有权(根据他们的声明)的指定值。所以你设置这个属性的数组由self保留(我假设这里的属性是retaincopy),但是它的初始化已经有一个保留计数+1。

行更改为:

self.results = [NSMutableArray array]; 

而且内存泄漏应该清理。

+1

我做了上面的改变,但它仍然显示内存泄漏.. :( – 2012-01-17 19:26:21

+0

这是你的代码示例中唯一的内存泄漏。其他泄漏必须来自其他代码。 – 2012-01-17 19:54:46

+0

如果你还没有释放它,你也在泄漏'imagesArray'在'dealloc'方法中 – murat 2012-01-17 20:16:04