zoukankan      html  css  js  c++  java
  • UIWebView使用中的内存相关问题

    本文转载至: http://blog.csdn.net/musou_ldns/article/details/7675589
     

    在iOS5平台开发应用的过程中,发现使用UIWebView通过NSURLRequest加载网页后,即使UIWebView所在画面关闭,仍然有内存无法释放。 

    结果就是,通过UIWebVIew访问的页面越多,应用的内存占用也越多,从而有导致内存警告而造成程序退出的可能。 

    通过调查网上的相关资料,发现UIWebVIew的内存问题由来已久,在iOS4时代就已经存在。 

    stackflow有大量的相关提问和解决办法,例如清空cache: 

     

    - (void)webViewDidFinishLoad:(UIWebView *)webView {

     

        // new for memory cleaning 

        [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"];

        // new for memory cleanup 

        [[NSURLCache sharedURLCache] setMemoryCapacity: 0];

        NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil];

        [NSURLCache setSharedURLCache:sharedCache];

    }

    在画面结束时让UIWebView加载空白页面: 

    [webView loadHTMLString:@"" baseURL:nil];

    [webView stopLoading];

    [webView setDelegate:nil];

    [webView removeFromSuperview];

    [[NSURLCache sharedURLCache] removeAllCachedResponses];

    但经过实机测试,发现并没有什么效果。

    网络上大部分开发者的意见是,目前UIWebView的内存问题出在 WebKit里,开发者仍旧没有很好的解决办法。

    随后发现了另一种变相的解决方式,既然无法阻止内存占用量的持续上升,就把它控制在一定的范围以内并及时清空。

    具体的方式如下:

    在UIApplicationDelegate中的

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中添加如下代码:

    int cacheSizeMemory = 4*1024*1024; // 4MB
    int cacheSizeDisk = 32*1024*1024; // 32MB
    NSURLCache *sharedCache = [[[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"] autorelease];
    [NSURLCache setSharedURLCache:sharedCache];

    同时追加内存警告时的处理:

    - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
        [[NSURLCache sharedURLCache] removeAllCachedResponses];
    }

    经实机测试,的确会降低系统内存的用量,但应用本身的内存占用量没有大的变化。

    以上调查结果,仅供参考。

  • 相关阅读:
    Button与Submit调用前台与后台代码的方法
    ASP.NET前台代码绑定后台变量方法总结
    点击后禁用提交按钮
    SilverLight3测试(1): Message: AG_E_NETWORK_ERROR
    SilverLight 问题解决
    XmlSerializers.dll.deploy 未成功
    命令模式泛型?问题?
    SilverLight 收藏(2009年3月27日)
    在Web安装工程中为虚拟目录指定不同的本地路径
    Silverlight 3 Sample Application: Slidentity
  • 原文地址:https://www.cnblogs.com/Camier-myNiuer/p/3845290.html
Copyright © 2011-2022 走看看