uiwebview和巨大的记忆丧失

时间:2010-08-27 09:34:59

标签: iphone memory memory-management uiwebview

我在使用UIWebViews时遇到问题,我在这里看到了同样的问题,但没有帮助答案。问题在于:UIWebView memory management。我会引用它:

  

我正在开发一个大量使用UIWebView的应用程序。这个应用程序在从我的服务器加载内容时动态生成大量的UIWebViews。其中一些UIWebView非常大,并且有很多图片。

     

如果我使用仪器检测泄漏,我没有发现任何泄漏。但是,分配了很多对象,我怀疑这与UIWebViews有关。

     

当webviews因不再需要而发布时,似乎并未释放所有内存。我的意思是,在向我的服务器发出请求后,该应用程序创建了一个UITableView和许多webview(仪器说大约8Mb)。当用户点击时,所有这些都被释放但内存使用量仅下降约2-3 Mb,使用该应用程序5-10分钟后崩溃。

我创建了简单的测试应用程序并获得了相同的结果。

这是一个tableView,我正在创建这样的DetailsView:

DetailsVC *detailViewController = [[DetailsVC alloc] initWithNibName:@"DetailsVC" bundle:nil];
detailViewController.n = indexPath.row;
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
在DetailsVC中

我在IB中创建了一个webView。我加载像这样的HTML:

    NSString *urlAddress;
if (self.n == 0)
{
    urlAddress = @"http://www.google.com";
}
else 
{
    urlAddress = @"http://www.yahoo.com";
}

NSURL *url = [NSURL URLWithString:urlAddress];

NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

[self.webView loadRequest:requestObj];

我也这样做:

- (void)viewDidUnload {
self.webView = nil;
}

就是这样,每当我在RootViewController中选择任何webView时,我都会丢失2-3 Mb的内存,是否有解决此问题的方法?

感谢。

3 个答案:

答案 0 :(得分:3)

请检查以下内容 1.你是否将webview作为属性删除它 2.将以下代码放在didFinishLaunchingWithOptions

中的Appdelegate
    NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil];
    [NSURLCache setSharedURLCache:sharedCache];
    [sharedCache release];

我认为你的问题已经解决了

答案 1 :(得分:0)

我想因为你设置了webview = nil,你就失去了释放它的机会。

答案 2 :(得分:0)

我知道这个帖子有点陈旧,但只是为了一个想法,并添加一些更相关的位,我想添加这些提示,以便未来的访问者也可以看看这个,这个问题可能会得到解决。 / p>

  • 您应该set Cache policyNSURLRequest个对象,并检查忽略缓存数据的政策,请参阅documentation

    < / LI>
  • 由于您在代码中调用了release,我假设您使用的是ARC,那么为什么不在viewDidUnload()中调用[super dealloc]

  • 看一下这个线程,了解如何使用UIWebView cleanForDealloc

  • 是UITableViewController吗?用自定义单元格?尝试解除分配(release,removeFromSuperView,设置为nil)。

希望它有所帮助!