UIWebView使用时内存溢出等相关问题
来源:互联网 发布:反抄袭软件 编辑:程序博客网 时间:2024/06/05 15:36
在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使用时内存溢出等相关问题
- UIWebView使用中的内存相关问题
- UIWebView使用中的内存相关问题
- UIWebView内存相关问题
- UIWebView使用中的内存相关问题---强烈推荐使用WKWebView
- java内存溢出相关问题
- Java内存溢出相关问题
- Androoid内存溢出相关问题
- Android内存溢出的相关问题
- UIWebView内存占用过高、崩溃、内存溢出
- UIWebView内存占用过高、崩溃、内存溢出
- UIWebView内存占用过高、崩溃、内存溢出
- UIWebView内存占用过高、崩溃、内存溢出
- 使用ViewPager时,发生内存溢出OOM问题
- UIWebView内存问题
- 启动时内存溢出问题
- 内存溢出相关
- list使用时内存溢出
- Some insight into the read cache of ZFS - or: The ARC
- Codeforces Round #313(div.2) E. Gerald and Giant Chess
- springmvc之rest风格的增删改查
- Android源码解析--Material Design之水波纹点击效果RippleEffect使用
- BOMB开发文档
- UIWebView使用时内存溢出等相关问题
- 排序算法就是那么回事儿<三>
- BigDecimal进行精确运算(实现加减乘除运算)
- CSS学习总结
- Node.js中的Query String模块
- JSP9种内置对象
- python列表索引
- 关于Xcode7.1beta版使用http报错的解决方法
- ls -al每一列的意思