5

请帮忙!已经盯着这个看了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 会导致内存泄漏?我只是不明白。谢谢。

4

4 回答 4

5

我也遇到dataWithContentsOfURL:了 iPhone 模拟器中 NSData 的泄漏问题。我发现当我使用其他便捷方法 ( dataWithContentsOfURL:options:error:) 时,我不会出现内存泄漏。

我的代码看起来像这样:

NSURL *url = [NSURL URLWithString:urlString];
NSError *error = nil;
NSData *data = [NSData dataWithContentsOfURL:url
                                     options:0
                                       error:&error];

链接到文档

于 2009-09-18T05:07:46.957 回答
4

我认为这是正在发生的事情:

加载 ViewController.xib 时,会分配并初始化 UIWebView 的实例。由于您没有将其连接到任何地方,因此它不会被释放。我认为您需要将其连接起来并在支持视图控制器的 dealloc 函数中释放它。我记得必须手动释放我在 xib 文件中创建的每个对象。

于 2008-11-11T05:06:16.220 回答
1

Are you running Leaks on the Simulator? If so, caveat coder. The Simulator will leak memory where the iPhone hardware won't. No simulator is ever a perfect match for the exact behavior of your code on the device.

I would test on the device as well. I just did the same thing on a similar issue with UITableViewController which was leaking in the Sim but not on the phone.

于 2008-12-30T15:18:19.447 回答
0

[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];

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

于 2015-05-25T12:02:29.817 回答