我正在对我当前的项目进行泄漏测试,但我被难住了。我疯狂地浏览并尝试了除了鸡肉牺牲之外的所有方法。我刚刚从头开始创建了一个小型玩具项目应用程序,我可以在其中复制泄漏。所以要么 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
设置委托(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/