Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UIWebView内存管理_Iphone_Cocoa_Memory Management_Memory Leaks_Uiwebview - Fatal编程技术网

Iphone UIWebView内存管理

Iphone UIWebView内存管理,iphone,cocoa,memory-management,memory-leaks,uiwebview,Iphone,Cocoa,Memory Management,Memory Leaks,Uiwebview,我的内存管理有问题 我正在开发一个大量使用UIWebView的应用程序。此应用程序在从我的服务器加载内容时动态生成大量UIWebView。其中一些UIWebView相当大,有很多图片 如果我使用仪器检测泄漏,我不会检测任何泄漏。但是,分配了很多对象,我怀疑这与UIWebView有关 当WebView因不再需要而释放时,似乎并非所有内存都已释放。我的意思是,在向我的服务器发出请求后,应用程序会创建一个UITableView和许多网络视图(仪器显示大约8Mb)。当用户回击时,所有应用程序都会被释放,

我的内存管理有问题

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

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

当WebView因不再需要而释放时,似乎并非所有内存都已释放。我的意思是,在向我的服务器发出请求后,应用程序会创建一个UITableView和许多网络视图(仪器显示大约8Mb)。当用户回击时,所有应用程序都会被释放,但内存使用量只会减少2-3MB,使用该应用程序5-10分钟后就会崩溃

我错过什么了吗? 有人知道会发生什么吗


谢谢大家!

如果在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中解决此问题请看一下我的解决方案: