iOS学习之路:ARC内存清理&缓存清理&效率优化

最近项目中遇到了很多关于内存泄露和缓存清理的问题,尤其是ARC这块内存什么时候释放,以及UIWebview的缓存清理,消耗了很多时间,特别做个总结:

1. 关于ARC内存释放猜想

我们都知道在ARC机制下,我们不需要手动管理内存,例如Autorelease和release等函数都不能调用,系统会自动为我们释放,我们需要做的,仅仅是把指针设置成nil就可以了,如果需要,再把相应的view remove掉就可以了。但是在实际代码过程中,会发现申请的指针在这个函数体执行完毕之后并没有把内存释放掉。在网上搜索了好久也没有什么好的解释。先说下具体的例子吧。

例如有个函数a,作用是生成一张图片,那在函数体里面我们需要new一个指针出来,指向生成的图片,UIImageView* img = [UIImage alloc]init ... 具体就不写了,在函数即将结束的时候,我们将img = nil。到此实际就完成了ARC所要求的用户操作了。但是我们debug时会发现,这快内存并没有实时释放掉。每当我们调用一下函数a,内存就会增大一部分。似乎是系统将我们生成的指针丢在了某块内存池中,但是这个池子什么时候释放掉,是系统说了算的,所以当函数执行完的时候,内存并没有被释放。

那如果解决呢?

我们申请一个全局指针,在整个程序的生命周期都存在,这样每当我们调用函数a的时候,就把这个全局指针指向生成的图片。这样就不会造成每次都要new一块内存出来而释放不掉的问题了。

2. UIWebView缓存清理

项目中要显示很多webview,但是当我们切换web的内容是,发现以前的缓存并没有释放掉,于是就会出现每加载一遍,内存就蹦很多的情况。在网上搜了下解决办法。

最简单的一种是每次在申请之前让webview load一个空的URL:

webView loadHTMLString:NULL baseURL:NULL;

但是这种方法似乎不能完全清理缓存,于是在stackoverflow上搜到了正确的解决办法:http://stackoverflow.com/questions/2523435/how-to-clear-uiwebview-cache

if (lastReq){
   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值