UIWebView旋转和内存问题

时间:2010-06-02 06:48:35

标签: memory uiwebview ipad

我有一个UIWebView加载嵌入式XHTML,如下所示:

body = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
body.scalesPageToFit = YES;
body.backgroundColor = [UIColor scrollViewTexturedBackgroundColor];
body.autoresizingMask =  UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;

[self.view addSubview:body];
[body loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"article16" ofType:@"xhtml"]isDirectory:NO]]];

这个XHTML有很多图像,当我旋转设备时,我收到了一些内存警告,有时应用程序崩溃了。 如果我删除自动调整掩码,特别是UIViewAutoresizingFlexibleWidth(我只尝试了UIViewAutoresizingFlexibleLeftMargin和UIViewAutoresizingFlexibleRightMargin没有问题),内存警告停止,应用程序不再崩溃。

如果删除所有自动调整遮罩,并在didRotate或willRotate中设置新的webView框架,我会收到与使用UIViewAutoresizingFlexibleWidth相同的警告。

有一个名为Atomic Web的应用程序可以打开相同的XHTML并且在没有内存警告的情况下进行旋转,Safari也可以打开它,但是如果我创建一个只有UIWebView的项目,应用程序有时会崩溃。

有人知道这可能是什么吗?我可以用其他方式设置webview框架吗?为什么我不能使用自动调整遮罩?

感谢您的关注。

2 个答案:

答案 0 :(得分:3)

我也看到了内存问题,但与UIScrollView的容量略有不同。当您的UIScrollView子类(包括UIWebView)将其应用为背景颜色时,[UIColor scrollViewTexturedBackgroundColor]属性似乎占用了大量内存。

我建议将其更改为纯灰色等颜色。我注意到活动监测仪器报告的内存减少了7 MB,只需进行简单的更改。

答案 1 :(得分:0)

尝试:

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