我有以下泄漏的代码。Instruments表示泄漏的是rssParser对象。我“刷新”了XML提要,它运行了代码块,然后就泄漏了……
file.h
@interface TestAppDelegate : NSObject <UIApplicationDelegate> {
NSXMLParser *rssParser;
}file.m
NSData *data = [ NSURLConnection sendSynchronousRequest:request returningResponse: nil error: nil ];
rssParser = [[NSXMLParser alloc] initWithData:data];
[rssParser setDelegate:self];
[rssParser setShouldProcessNamespaces:NO];
[rssParser setShouldReportNamespacePrefixes:NO];
[rssParser setShouldResolveExternalEntities:NO];
[rssParser parse];
[rssParser release];泄漏的图像...
alt text http://www.shipfinder.co.uk/images/memoryleak.png
发布于 2010-01-22 14:44:07
苹果给我回复了,这是一个6469143号错误
看起来他们计划修复4.0版本
发布于 2009-10-21 15:00:08
最有可能的原因是你的一个委托方法保留了解析器。你对委托方法中的解析器参数做了什么吗?
你每次刷新的时候都会漏水吗?
如果这是唯一使用rssParser的地方,为什么你要让它成为一个依瓦尔?如果你确实需要一个ivar,我再怎么强调它的重要性也不为过,它总是为它们使用访问器,而不是直接访问它们。避免内存泄漏的最好方法是为您的ivar使用访问器。
此外,如果没有立即将其设置为其他值(通常为nil),则永远不要释放它。您上面发布的rssParser是一个等待发生的崩溃,因为您现在有一个指向可能未分配的内存的指针。
发布于 2009-11-10 01:50:51
这似乎是一个众所周知的问题。看这里,NSURLConnection leaking。但是,如果您在初始化解析器之前设置了以下内容,泄漏就会停止:
[[NSURLCache sharedURLCache] setMemoryCapacity:0];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
NSXMLParser *parser = [[NSXMLParser alloc]initWithContentsOfURL:URL];https://stackoverflow.com/questions/1598928
复制相似问题