zoukankan      html  css  js  c++  java
  • release, retain, autorelease 与 AT, MT, AMT

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

    可以这样简化来考虑:
    一,没有垃圾回收

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

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

    二,有垃圾回收
    基本上可以忘掉release和autorelease了,只是适当的时候用一下retain,防止被系统过早回收。

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

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

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

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

  • 相关阅读:
    Tree Grafting
    敌兵布阵
    畅通工程(并查集)
    The Suspects(并查集)
    Ubiquitous Religions(friends变形)
    Friends(采用树结构的非线性表编程)
    小球下落(二叉树)
    铁轨
    卡片游戏
    征服C指针
  • 原文地址:https://www.cnblogs.com/swnuwangyun/p/1997790.html
Copyright © 2011-2022 走看看