首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSXMLParser泄漏

NSXMLParser泄漏
EN

Stack Overflow用户
提问于 2009-10-21 13:46:48
回答 4查看 6K关注 0票数 9

我有以下泄漏的代码。Instruments表示泄漏的是rssParser对象。我“刷新”了XML提要,它运行了代码块,然后就泄漏了……

file.h

代码语言:javascript
复制
@interface TestAppDelegate : NSObject <UIApplicationDelegate> {

    NSXMLParser *rssParser;

}

file.m

代码语言:javascript
复制
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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-22 14:44:07

苹果给我回复了,这是一个6469143号错误

看起来他们计划修复4.0版本

票数 10
EN

Stack Overflow用户

发布于 2009-10-21 15:00:08

最有可能的原因是你的一个委托方法保留了解析器。你对委托方法中的解析器参数做了什么吗?

你每次刷新的时候都会漏水吗?

如果这是唯一使用rssParser的地方,为什么你要让它成为一个依瓦尔?如果你确实需要一个ivar,我再怎么强调它的重要性也不为过,它总是为它们使用访问器,而不是直接访问它们。避免内存泄漏的最好方法是为您的ivar使用访问器。

此外,如果没有立即将其设置为其他值(通常为nil),则永远不要释放它。您上面发布的rssParser是一个等待发生的崩溃,因为您现在有一个指向可能未分配的内存的指针。

票数 3
EN

Stack Overflow用户

发布于 2009-11-10 01:50:51

这似乎是一个众所周知的问题。看这里,NSURLConnection leaking。但是,如果您在初始化解析器之前设置了以下内容,泄漏就会停止:

代码语言:javascript
复制
[[NSURLCache sharedURLCache] setMemoryCapacity:0];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
NSXMLParser *parser = [[NSXMLParser alloc]initWithContentsOfURL:URL];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1598928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档