本文转载至: 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];
}

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

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

最新文章

  1. uoj228 基础数据结构练习题
  2. Crawling is going on - Alpha版本使用说明
  3. Memcached 安装及配置
  4. 用linq实现登陆功能
  5. 【HDOJ】1556 Color the ball
  6. 【记录】ACM计划
  7. 阿里云服务器部署笔记一(python3、Flask、uWSGI、Nginx)
  8. Mysql外键约束--转载
  9. 【Node.js】一、搭建基于Express框架运行环境+更换HTML视图引擎
  10. oracle新建表空间的四条语句
  11. FFmpeg: AVCodecParameters 结构体分析
  12. Vue 入门之 Vuex 实战
  13. 使用Windows 2008R2中的NFS替代Samba协议,解决Windows 与Linux共享文件的问题
  14. Ubuntu16.04 安装 “宋体,微软雅黑,Consolas雅黑混合版编程字体” 等 Windows 7 下的字体
  15. OSX - 可以安装任何程序!
  16. 四则运算<C++>
  17. clientHeight、offsetHeight、scrollHeight、clientTop、scrollTop、offsetTop的对比
  18. 环境变量 - Maven
  19. CodeForces 669B
  20. hbase中清空整张表的数据

热门文章

  1. 删除svn控制
  2. 解决mysql 远程链接问题
  3. 在本地(自己电脑上)部署了tomcat服务器,真机测试遇到的问题
  4. Go语言调度器之主动调度(20)
  5. JUC线程池深入刨析
  6. 【spring cloud】【spring boot】项目启动报错:Cannot determine embedded database driver class for database type NONE
  7. C#是唯一能挑战Java的编程语言?
  8. Linux内核中等待队列的几种用法
  9. hibernate向mysql插入数据后,得到该条数据主键的方法
  10. F - 概率(经典问题)