我正在对我当前的项目进行泄漏测试,我很难过。我一直在疯狂地浏览并尝试除了鸡肉牺牲之外的一切。我刚从头创建了一个小玩具项目应用程序,我可以在那里复制泄漏。所以要么UIWebView
有泄漏,要么我做的事情非常愚蠢。
从本质上讲,它归结为对loadRequest:
对象的UIWebView
调用,给定URLRequest
从NSURL
构建引用文件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的答案(将共享网址缓存设置为空),但这没有帮助。
有人可以帮忙吗?
答案 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,我会假设相同。