注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

IOS & JAVA KEY

(iMilo)

 
 
 

日志

 
 
关于我

All the splendor in the world is not worth a good friend!! Hello my friend!!

网易考拉推荐

release, retain, autorelease 与 AT, MT, AMT  

2011-05-21 20:29:31|  分类: IOS |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

        Objective C 中的release, retain, autorelease再加上垃圾回收,对于初学者经常搞的晕头转向,很难彻底理解,既然有release,为何还要autorelease autorelease是否就是垃圾回收? 我们结合汽车变速箱中离合器 ...

       Objective C 中的release, retain, autorelease再加上垃圾回收,对于初学者经常搞的晕头转向,很难彻底理解,既然有release,为何还要autorelease autorelease是否就是垃圾回收? 我们结合汽车变速箱中离合器的控制来理解一下。

可以这样简化来考虑:

一,没有垃圾回收

retain/release是最基本的,一个增加计数,一个减少引用计数,创建对象后,我们只要适当的时候releaseok了。

autorelease一般用在stringWithString这样比较爽的对象创建+初始化的静态函数中,跟release差不多,唯一的区别是你不用手工去release了,相当于在后台有一个机器人帮你release

二,有垃圾回收

基本上可以忘掉releaseautorelease了,只是适当的时候用一下retain,防止被系统过早回收。

    这让我联想到汽车变速系统中的AT, MT, AMT,对于离合器的处理方法:

    MT是手动档,要你自己踩离合,相当于release

    AT是自动档,没有离合了,相当于系统垃圾回收

    AMT是在手动档的基础上实现的自动换档功能,相当于请了一个司机来帮你踩离合,相当于autorelease,表面上看你都不用自己踩离合和release了,实际上背后有个人帮你做。 

  评论这张
 
阅读(555)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017