UIWebView使用中的内存相关问题

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

applicationios5webkit测试cacheios

在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];
}

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

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

UIWebView使用中的内存相关问题

时间: 2024-08-12 07:45:22

UIWebView使用中的内存相关问题的相关文章

JVM--Java内存相关

Java内存模型,Java内存管理,Java堆和栈,垃圾回收 本文是<成神之路系列文章>的第一篇,主要是关于JVM的一些介绍. 持续更新中 Java内存模型 细说Java多线程之内存可见性(视频)(推荐)(如果嫌视频讲的慢,建议使用1.5倍速度观看) JSR 133: JavaTM Memory Model and Thread Specification Revision(JMM英文官方文档) Java内存模型FAQ 深入理解Java内存模型(一)——基础 深入理解Java内存模型(二)——

驱动移植过程中DMA内存相关接口替换

1. 相关概念介绍及移植简介 1.1 物理地址与总线地址         1)物理地址是与CPU相关的.在CPU的地址信号线上产生的就是物理地址,在程序指令中的的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上.         2)总线地址,顾名思义,是与总线相关的,外设使用的就是总线地址.         在x86平台下,外设的I/O地址是独立的,即有专门的指令访问外设I/O,I/O地址就是所谓的"总线地址".而"物理地址"就

Spark 1.x 爆内存相关问题汇总及解

Spark 1.x 爆内存相关问题汇总及解决 OOM java.lang.OutOfMemoryError # on yarn org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl - Container [<edited>] is running beyond physical memory limits. Current usage: 18.0 GB of 18 GB

(笔记)Linux内核中内存相关的操作函数

linux内核中内存相关的操作函数 1.kmalloc()/kfree() static __always_inline void *kmalloc(size_t size, gfp_t flags) 内核空间申请指定大小的内存区域,返回内核空间虚拟地址.在函数实现中,如果申请的内存空间较大的话,会从buddy系统申请若干内存页面,如果申请的内存空间大小较小的话,会从slab系统中申请内存空间.有关buddy和slab,请参见<linux内核之内存管理.doc> gfp_t flags 的选项

Sql Server 内存相关计数器以及内存压力诊断

在数据库服务器中,内存是数据库对外提供服务最重要的资源之一, 不仅仅是Sql Server,包括其他数据库,比如Oracle,MySQL等,都是一类非常喜欢内存的应用. 在Sql Server服务器中,最理想的情况是Sql Server把所有所需的数据全部缓存到内存中,但是这往往也是不现实的,因为数据往往总是大于可用的物理内存 可以说内存是否存在压力能够直接决定数据库能否高效运行,同时,如果内存出现压力,同时也会影响到CPU的使用和存储性能,可以说是一损俱损,具有连带性. 那么,如何识别内存是否

linux与内存相关的命令

使用这个命令之前需要先理解什么是虚拟内存?有关虚拟内存这里推荐几片博客: https://blog.csdn.net/qq_38410730/article/details/81036768 https://www.cnblogs.com/aaronax/p/5645246.html 上面两片博客第一篇博客解释的很详细,但我绝对第二篇博客可能更容易理解吧,因为没有太涉及底层的东西. vmstat命令: [root@test2 ~]# vmstat -h usage: vmstat [-V] [-

Java:内存相关认识

JVM管理的内存 程序计数器(PC):每条线程都有独立的PC JVM栈(Java栈):描述的是Java方法执行的内存模型,每个方法被执行的时候会创建一个栈帧用于存储局部变量表.操作栈.动态链接.方法出口等信息,也是线程私有的. 本地方法栈:与Native方法相关 Java堆:线程共享的内存地址空间,用于存放对象实例,也是GC管理的主要区域. 直接内存:与Native堆相关 方法区:存储已被JVM加载的类信息.常量.静态变量等数据,这个区域的内存回收目标主要针对常量池的回收和类的卸载.方法区也是线

【python】内存相关

1.  /proc/pid/status 可以查看进程相关的详细信息,当内存异常时可查看 参考:http://blog.csdn.net/beckdon/article/details/48491909 2. top -p 进程号 实时查看进程相关内存 3. 内存调试 参考:http://blog.csdn.net/ybdesire/article/details/73128353 memory_profiler  查看函数中各行代码的内存增长 guppy  查看python对象占用的堆内存大小

SQL Server 与内存相关的术语

术语 1. virtual address space 虚拟地址空间 它是一个应用程序可以访问的最大地址空间.32位机上是4G(2^32).虚拟地址空间中的数据不一定在物理内存里.可能在缓存文件中. 术语 2. physical memory 物理内存 内存心片提供的存储空间. 术语 3. reserved memory 保留内存 应用程序可以先保留一块地址以供未来使用.如果某一地址以被别的程序保留,你去访问它会收到一个越界错误. 术语 4. committed memory 提交内存 将以前保