繁体   English   中英

iPhone - 内存泄漏 - NSData dataWithContentsOfUrl和UIWebView

[英]iPhone - Memory Leak - NSData dataWithContentsOfUrl & UIWebView

请帮忙! 一直盯着这个12个小时; 并已在线查找,无法找到解决方案。

在我的应用程序中,我在单独的页面/控制器中使用2个UIView控件:

  • UIImageView(通过NSData dataWithContentsOfUrl检索数据)
  • UIWebView的

为了隔离我的代码,并使其更容易解释,我创建了一个名为“MyTestApplication”的基于视图的新项目

1 - 我在委托函数中添加了一个简单的NSData dataWithContentsOfUrl。

NSData *imageData = [NSData dataWithContentsOfURL:
  [NSURL URLWithString:@"http://www.google.com/intl/en_ALL/images/logo.gif"]];

(由于它全部使用便利功能,因此无需在此发布)

替代文字http://img.skitch.com/20081110-j5tn5n7ixph95ys4rpchibaw5p.preview.jpg

看图

2 - 运行它以验证没有泄漏(如预期的那样)

替代文字http://img.skitch.com/20081110-fy2qrkgy47hm4fe2f1aakd4muw.preview.jpg

看图

3 - 打开ViewController.xib,只需从库中添加一个UIWebView(无需连线)

替代文字http://img.skitch.com/20081110-d63c3yh1a1kqiciy73q8uyd68j.preview.jpg

看图

4 - 运行它以验证是否有泄漏! (为什么???)

替代文字http://img.skitch.com/20081110-qtxcfwntbcc3csabda3r6nfjg6.preview.jpg

看图

我究竟做错了什么? 请帮忙!

如果我使用UIWebView,为什么NSData会导致内存泄漏? 我只是不明白。 谢谢。

我也遇到了来自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文件中创建的每个对象。

你在模拟器上运行泄漏了吗? 如果是这样,请注意编码器。 模拟器将泄漏iPhone硬件不存在的内存。 没有任何模拟器可以完美匹配您设备上代码的确切行为。

我也会在设备上进行测试。 我在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];

生产代码还需要响应和错误参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM