Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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
Ios UIWebView内存管理提示_Ios_Ipad_Memory Management_Uiwebview - Fatal编程技术网

Ios UIWebView内存管理提示

Ios UIWebView内存管理提示,ios,ipad,memory-management,uiwebview,Ios,Ipad,Memory Management,Uiwebview,我正在开发一个iOS应用程序,它大量使用多个UIWebView。所有请求都是从应用程序包中的本地html文件加载的。我在这里找到了尝试在释放时防止内存泄漏的绝妙技巧: 我想做的是创建一个Factory类,它包含一个包含3个UIWebView实例的池,任何时候请求UIWebView时,它都应该从这个池中请求一个实例。因此,除非遇到内存警告,如果需要,我可能会取消分配Web视图,否则我永远不会取消分配Web视图 这就是我到目前为止的想法,我正在寻找关于我的建议的任何额外提示或意见 一旦池已满,就必须

我正在开发一个iOS应用程序,它大量使用多个UIWebView。所有请求都是从应用程序包中的本地html文件加载的。我在这里找到了尝试在释放时防止内存泄漏的绝妙技巧:

我想做的是创建一个Factory类,它包含一个包含3个UIWebView实例的池,任何时候请求UIWebView时,它都应该从这个池中请求一个实例。因此,除非遇到内存警告,如果需要,我可能会取消分配Web视图,否则我永远不会取消分配Web视图

这就是我到目前为止的想法,我正在寻找关于我的建议的任何额外提示或意见

  • 一旦池已满,就必须重新使用WebView。它将是一个先进先出类型堆栈
  • 一旦请求重用webview,它将执行HTML实现中定义的destroy方法,以清空全局变量。这可以使用UIWebView的stringByEvaluatingJavascriptFromString来完成
  • 完成后,WebView将执行document.innerHTML=“”;清除文件
  • 然后,重新使用的UIWebView将加载新请求
  • 我听说使用多个图像会占用大量内存。当池中的UIWebView不在屏幕上时,用一个小图像替换所有标记源是否有益
  • 感谢您的任何意见

    谢谢,
    Fergal.

    不要使用loadHTMLFromString或loadRequest重新加载内容,而是继续使用stringByEvaluatingJavascriptFromString,通过javascript将特定ID的节的内部HTML设置为所需内容,它不会占用大量内存

    尝试使用分页网页,您可以使用NSURL协议缓存页面数据

    它会将页面和缓存加载到磁盘上,以便从缓存向后导航,并且只有一个页面在正在查看的内存中

    这是UIWebView的最佳选择,或者您可以选择MKWebView,因为它可以为您提供更多功能。

    更新:我尝试创建一个池,并执行上面记录的步骤,但是发现,通过清除池中的UIWebView的内容,然后重新加载新内容,从池中重用UIWebView会比释放/重新分配UIWebView泄漏更多内存。我尝试这个项目的原因是,我发现分配/释放内存也会泄漏内存,但不会像重新使用web视图那样多。