wol*_*evo 18 iphone cocoa memory-leaks memory-management uiwebview
我的内存管理有问题.
我正在开发一个大量使用UIWebView的应用程序.这个应用程序在从我的服务器加载内容时动态生成大量的UIWebViews.其中一些UIWebView非常大,并且有很多图片.
如果我使用仪器检测泄漏,我没有检测到任何泄漏.但是,分配了很多对象,我怀疑这与UIWebViews有关.
当webviews因不再需要而发布时,似乎并非所有内存都被释放.我的意思是,在向我的服务器发出请求后,该应用程序创建了一个UITableView和许多webview(仪器说大约8Mb).当用户点击时,所有这些都被释放但内存使用量仅下降约2-3 Mb,使用该应用程序5-10分钟后它崩溃.
我错过了什么吗?有谁知道会发生什么?
谢谢!
这不是解决方案,而是您可能面临的问题的可能解释.
我使用的应用程序存在内存问题.它由(实际上)滚动视图组成,包含3个全屏大小的Web视图.每个webview的内容大小都是多个屏幕,平均说是10个.
加载webview时,整个视图将在内存中呈现.因此,除了用于加载图像和其他数据的内存(您在分配工具中看到的内容)之外,Web视图本身在渲染时无法控制使用内存.
因此,例如,将使用具有10页内容的768x1024 webview
768*1024*10(页)*4(每像素位数)= 31,457,280 = 30MB.
乘以3个Web视图,并且在应用程序直接分配的内存之上使用90MB.
您可以使用VM Tracker仪器了解仪器中使用的内存量.
尝试添加
[webView loadHTMLString: @"" baseURL: nil];
Run Code Online (Sandbox Code Playgroud)
在您发布webview之前.对于4.2.1中有关在UIWebView中显示PDF的泄漏,这解决了我的大部分泄漏问题.
小智 0
如果您在视图控制器的同一实例中添加多个子视图,则必须在添加新子视图之前从超级视图中删除旧子视图。
\n\n在将 UIWebView 添加为子视图之前,为其添加一个标签:
\n\nwebView.tag = 10;\n[self.view addSubview:webView];\n\nwebView = nil;\nRun Code Online (Sandbox Code Playgroud)\n\n在添加新的 Web 视图(这将清除旧视图)之前,请从超级视图中删除子视图:
\n\nUIWebView * oldWebView = (UIWebView *)[self.view viewWithTag:10];\n[oldWebView removeFromSuperview];\nRun Code Online (Sandbox Code Playgroud)\n\n如果您不\xc2\xb4t从超级视图中删除旧的WebView,它们将在内存中累积,直到您释放视图控制器。
\n