在ios7中使用webView的一个严重错误

时间:2014-04-25 13:28:24

标签: objective-c

当我打开网页视图时,内存会跳转到100M。如果我暂时忽略它,当关闭Web视图并删除所有缓存时,内存永远不会下降到原来的位置,但只减少了10M。我试图开始一个新的应用程序,清洁,我检查了它,它仍然发生。 您无法设置简单的Web视图,因为它的内存将永远存在。

在删除网络视图之前清除缓存:

      [self.webView loadHTMLString: @"" baseURL: nil]; //tried with/without it


 [[NSURLCache sharedURLCache] removeCachedResponseForRequest:urlRequest];
 [[NSURLCache sharedURLCache] removeAllCachedResponses];
 [[NSURLCache sharedURLCache] setDiskCapacity:0];
 [[NSURLCache sharedURLCache] setMemoryCapacity:0];
  NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil];
  [NSURLCache setSharedURLCache:sharedCache];

 urlRequest=nil;

 for(NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies])
     if([[cookie domain] isEqualToString:[Globals sharedGlobals].currentLink])
         [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];

   [self.webView removeFromSuperview];
   [self.view removeFromSuperview];

加载网址:

  NSURL *websiteUrl = [NSURL URLWithString:[Globals sharedGlobals].currentLink];
     urlRequest = [NSURLRequest requestWithURL:websiteUrl cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10];
    [self.webView setDelegate:self];
    self.webView.scalesPageToFit = YES;
    [self.webView loadRequest:urlRequest];

尝试重现它,你会得到相同的。记忆力上升但不会下降。

1 个答案:

答案 0 :(得分:0)

这不是错误,这是预期的行为。第一次将UIWebView对象添加到视图层次结构时,整个WebKit堆栈将加载到内存中,这就是导致此峰值的原因。即使从视图层次结构中删除webview并且从不再显示它,WebKit堆栈仍将保留在内存中。由于webkit堆栈非常大,因此只能按需加载。

谨慎使用UIWebView!它功能非常强大,但配有大件行李。如果您只需要webview来显示简单页面,那么the new attributed string additions in iOS7可以通过将网页解析为可以在文本视图中显示的属性字符串来帮助您。