UIWebView内存管理

wol*_*evo 18 iphone cocoa memory-leaks memory-management uiwebview

我的内存管理有问题.

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

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

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

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

谢谢!

Ash*_*lls 7

这不是解决方案,而是您可能面临的问题的可能解释.

我使用的应用程序存在内存问题.它由(实际上)滚动视图组成,包含3个全屏大小的Web视图.每个webview的内容大小都是多个屏幕,平均说是10个.

加载webview时,整个视图将在内存中呈现.因此,除了用于加载图像和其他数据的内存(您在分配工具中看到的内容)之外,Web视图本身在渲染时无法控制使用内存.

因此,例如,将使用具有10页内容的768x1024 webview

768*1024*10(页)*4(每像素位数)= 31,457,280 = 30MB.

乘以3个Web视图,并且在应用程序直接分配的内存之上使用90MB.

您可以使用VM Tracker仪器了解仪器中使用的内存量.


Dad*_*Dad 5

尝试添加

[webView loadHTMLString: @"" baseURL: nil];
Run Code Online (Sandbox Code Playgroud)

在您发布webview之前.对于4.2.1中有关在UIWebView中显示PDF的泄漏,这解决了我的大部分泄漏问题.


小智 0

如果您在视图控制器的同一实例中添加多个子视图,则必须在添加新子视图之前从超级视图中删除旧子视图。

\n\n

在将 UIWebView 添加为子视图之前,为其添加一个标签:

\n\n
webView.tag  = 10;\n[self.view addSubview:webView];\n\nwebView = nil;\n
Run Code Online (Sandbox Code Playgroud)\n\n

在添加新的 Web 视图(这将清除旧视图)之前,请从超级视图中删除子视图:

\n\n
UIWebView * oldWebView = (UIWebView *)[self.view viewWithTag:10];\n[oldWebView removeFromSuperview];\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您不\xc2\xb4t从超级视图中删除旧的WebView,它们将在内存中累积,直到您释放视图控制器。

\n