【问题标题】:UIWebView leak? Can someone confirm?UIWebView 泄漏?有人可以确认吗?
【发布时间】:2011-02-03 05:13:44
【问题描述】:

我正在对我当前的项目进行泄漏测试,但我很难过。我一直在疯狂地浏览并尝试了除了鸡肉牺牲之外的所有东西。我刚刚从头开始创建了一个小型玩具项目应用程序,我可以在其中复制泄漏。所以要么UIWebView 有泄漏,要么我正在做一些非常愚蠢的事情。

本质上,它归结为对 UIWebView 对象的 loadRequest: 调用,给定一个从引用文件 URL 的 NSURL 构建的 URLRequest,用于应用程序包中的文件,该文件位于Xcode 通过引用包含的文件夹。唷。

泄漏是间歇性的,但仍有约 75% 的时间发生(在大约 20 次测试中发生了大约 15 次)。它发生在设备上——这不会在模拟器中泄漏。我正在使用 iPhone OS 3.1.3 的原始(第一代)iPod Touch 上针对 iPhone OS 3.1.2 和 3.1.3 进行测试。

要重现,只需从头开始创建一个项目。将UIWebView 添加到RootViewController 的.xib,通过IBOutlet 连接它。在 Finder 中,在项目文件夹中创建一个名为“html”的文件夹。在该文件夹中,创建一个名为“dummy.html”的文件,其中包含“Test”一词。 (not 必须是有效的 HTML。)然后通过选择“为任何添加的文件夹创建文件夹引用”将 html 文件夹添加到 Xcode 中的项目中

将以下内容添加到viewDidLoad

NSString* resourcePath = [[NSBundle mainBundle] resourcePath];
NSString* filePath = [[resourcePath stringByAppendingPathComponent:@"html"] stringByAppendingPathComponent:@"dummy.html"];
NSURL* url = [[NSURL alloc] initFileURLWithPath:filePath];
NSURLRequest* request = [NSURLRequest requestWithURL:url]; // <-- this creates the leak!
[browserView loadRequest:request];
[url release];

我已经尝试了所有方法,从为 UIWebView 设置委托和实现 UIWebViewDelegate,到不在 IB 中设置委托,再到不在 IB 中设置委托,以及将 Web 视图的 delegate 属性显式设置为零,使用alloc/init 而不是自动释放NSURLRequests(和/或NSURLs)...

我尝试了a similar question 的答案(将共享 URL 缓存设置为空),但没有帮助。

谁能帮忙?

【问题讨论】:

  • 提交到 Apple Radar 错误 ID #7892070
  • Apple 表示 iPhone OS 4.0 测试版中不存在泄漏。

标签: iphone cocoa-touch memory-leaks uiwebview


【解决方案1】:

试试:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
  [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"];
}

来自http://blog.techno-barje.fr/post/2010/10/04/UIWebView-secrets-part1-memory-leaks-on-xmlhttprequest

【讨论】:

    【解决方案2】:

    忘记了这个问题。

    4.1 中不存在泄漏。我会假设 4.2 也是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      • 2023-03-23
      • 2011-06-10
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多