Iphone UIWebView内存管理
我的内存管理有问题 我正在开发一个大量使用UIWebView的应用程序。此应用程序在从我的服务器加载内容时动态生成大量UIWebView。其中一些UIWebView相当大,有很多图片 如果我使用仪器检测泄漏,我不会检测任何泄漏。但是,分配了很多对象,我怀疑这与UIWebView有关 当WebView因不再需要而释放时,似乎并非所有内存都已释放。我的意思是,在向我的服务器发出请求后,应用程序会创建一个UITableView和许多网络视图(仪器显示大约8Mb)。当用户回击时,所有应用程序都会被释放,但内存使用量只会减少2-3MB,使用该应用程序5-10分钟后就会崩溃 我错过什么了吗? 有人知道会发生什么吗Iphone UIWebView内存管理,iphone,cocoa,memory-management,memory-leaks,uiwebview,Iphone,Cocoa,Memory Management,Memory Leaks,Uiwebview,我的内存管理有问题 我正在开发一个大量使用UIWebView的应用程序。此应用程序在从我的服务器加载内容时动态生成大量UIWebView。其中一些UIWebView相当大,有很多图片 如果我使用仪器检测泄漏,我不会检测任何泄漏。但是,分配了很多对象,我怀疑这与UIWebView有关 当WebView因不再需要而释放时,似乎并非所有内存都已释放。我的意思是,在向我的服务器发出请求后,应用程序会创建一个UITableView和许多网络视图(仪器显示大约8Mb)。当用户回击时,所有应用程序都会被释放,
谢谢大家! 如果在viewcontroller的同一实例中添加多个子视图,则必须先从superview中删除旧子视图,然后再添加新子视图 将标记添加到UIWebView,然后再将其添加为子视图:
webView.tag = 10;
[self.view addSubview:webView];
webView = nil;
在添加新webview(这将清除旧视图)之前,请从superview中删除子视图:
UIWebView * oldWebView = (UIWebView *)[self.view viewWithTag:10];
[oldWebView removeFromSuperview];
如果不从superview中删除旧的Web视图,它们将在内存中累积,直到释放viewcontroller。尝试添加
[webView loadHTMLString: @"" baseURL: nil];
就在您发布webview之前。对于4.2.1中与在UIWebView中显示PDF相关的泄漏,这为我解决了大多数泄漏问题。这不是一个解决方案,而是对您所面临问题的可能解释 我的一个应用程序内存有问题。它包括(实际上)一个滚动视图,包含3个全屏大小的web视图。每个网络视图的内容大小是多个屏幕,平均10个 加载webview时,整个视图将在内存中呈现。因此,除了用于加载图像和其他数据(您在分配工具中看到的内容)的内存之外,web视图本身在渲染时使用的内存是您无法控制的 因此,例如,一个包含10页内容的768x1024网络视图将使用 768*1024*10(页面)*4(每像素位)=31457280=30MB 乘以3个web视图,即在应用程序直接分配的内存上使用90MB
使用虚拟机跟踪器仪器,您可以了解仪器中使用了多少内存。将此信息写入您的
视图将消失
方法:
[WebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
这里有一个很好的方法:我投了反对票,因为这没有提供任何解释。它可能是对的,也可能不是,但如果没有任何解释,你就不可能相信这个答案。@RoyLeban很抱歉这是我这边的错,我道歉,现在我添加了描述谢谢:)我对这一点投了反对票,因为如果网页在iPhone上显示视频,它会通过全屏显示视频播放器来实现。这会触发WillEnglishe方法,从UIWebView中删除当前网页,并导致视频立即停止播放。在webview中使用更多图像会面临同样的问题。如何在Arc中解决此问题请看一下我的解决方案: