iphone - UIWebView 泄漏?有人可以确认吗?

标签 iphone cocoa-touch memory-leaks uiwebview

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

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

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

要重现,只需从头开始创建一个项目。添加UIWebViewRootViewController的 .xib,通过 IBOutlet 连接它。在 Finder 中,在项目文件夹内创建一个名为“html”的文件夹。在该文件夹中,创建一个名为“dummy.html”的文件,其中包含“Test”一词。 (不需要是有效的 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 设置委托(delegate)开始并实现UIWebViewDelegate ,不在 IB 中设置委托(delegate),不在 IB 中设置委托(delegate)并显式设置 Web View 的 delegate属性为零,使用 alloc/init而不是自动释放 NSURLRequest s(和/或 NSURL s)...

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

有人可以帮忙吗?

最佳答案

尝试:

- (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

关于iphone - UIWebView 泄漏?有人可以确认吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2557964/

相关文章:

iphone - 如何让 iPhone 应用程序在后台完全运行

iphone - GPUImageAlphaBlendFilter-在一个图像上合并两个图像

iphone - 另一个速度提升可能吗?

ios - 我有内存泄漏吗?

c - c中的垃圾收集器用于循环内的变量

c# - 在没有内存泄漏的情况下替换大字符串中的文本

iphone - 为什么我的 UITableView 在异步重新加载数据期间滚动时会失去流动性?

ios - iOS 7 中锁屏播放器的搜索栏问题

objective-c - 将标签栏应用程序与导航 Controller 一起使用

ios - 苹果手机 : How to capitalize the first character of my textfield?