2012-08-02 59 views
0

我正在开发一个iOS应用程序,它会大量使用多个UIWebViews。所有的请求都是从应用程序包中的本地html文件加载的。我发现真棒技巧试图将防止在释放此内存泄漏:http://www.codercowboy.com/code-uiwebview-memory-leak-preventionUIWebView内存管理技巧

我所希望做的是创造出拥有3个的UIWebView实例池Factory类,并要求一个UIWebView任何时候,都应该要求来自此池的实例。所以我永远不会解除分配WebViews,除非遇到内存警告,如果需要的话我可以取消分配WebViews。

这是我到目前为止想到的,并且正在寻找任何额外提示或对我的建议的评论。

  1. 一旦池已满,必须重新使用WebView。它将是先进先出型堆栈。
  2. 一旦webview被请求重用,它将执行HTML实现中定义的销毁方法来清空全局变量。这可以使用UIWebView的stringByEvaluatingJavascriptFromString
  3. 完成后,WebView将执行document.innerHTML =“”;清除文件。
  4. 重新使用的UIWebView将加载新的请求。
  5. 我听说使用多个图像可以使用大量的内存。当池中的UIWebView不在屏幕上时,用小图像替换所有标签源是否有好处?

欣赏这里的任何输入!

谢谢, Fergal。

+0

更新:**我试图创建一个池并实现上面记录的步骤,但发现通过清除其内容重新使用UIWebView,然后重新加载新内容比释放/重新分配内存泄漏更多的内存 - 分配UIWebView。我尝试这个项目的原因是,我发现也分配/释放泄漏内存,但不像重新使用Web视图。 – 2012-08-13 20:50:47

回答

1

不是使用loadHTMLFromString或loadRequest重新加载内容,而是继续使用stringByEvaluatingJavascriptFromString来设置具有特定ID的节的innerHTML与所需的内容,全部通过javascript,这将不会使用大量内存

0

尝试使用分页的网页,并且可以使用NSURLProtocol缓存页面的数据。

它会将页面和缓存加载到磁盘上,以便向后导航来自缓存,并且只有1页将在内存中查看。

这是最好的你可以用UIWebView做,或者你可以去MKWebView它可以让你额外的功能。