iPhone - 内存泄漏 - NSData dataWithContentsOfUrl和UIWebView

5 iphone cocoa-touch memory-leaks objective-c ios

请帮忙!一直盯着这个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"]];
Run Code Online (Sandbox Code Playgroud)

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

替代文字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会导致内存泄漏?我只是不明白.谢谢.

Sam*_*Sam 5

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

我的代码看起来像这样:

NSURL *url = [NSURL URLWithString:urlString];
NSError *error = nil;
NSData *data = [NSData dataWithContentsOfURL:url
                                     options:0
                                       error:&error];
Run Code Online (Sandbox Code Playgroud)

链接到文档


Jus*_*iss 4

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

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