UIWebView漏洞?有人可以证实吗?

时间:2010-04-01 03:23:44

标签: 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。

要重现,只需从头开始创建项目。将UIWebView添加到RootViewController的.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和实施UIWebViewDelegate的委托设置为未在IB中设置委托,以及未在IB中设置委托并明确设置网络视图的{{1 }}属性为nil,使用delegate / alloc而非获取自动释放init s(和/或NSURLRequest s)......

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

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

尝试:

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

答案 1 :(得分:2)

忘了这个问题。

4.1中没有泄漏。对于4.2,我会假设相同。