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了,实际上背后有个人帮你做。

  • 相关阅读:
    (图论)树的直径
    HDU 4607
    类属性的增删改查
    python内置常用模块
    字典的使用
    元组的使用
    列表的基本函数
    字符串练习题
    python3.7字符串基本函数
    python简单的while语句和if语句的练习
  • 原文地址:https://www.cnblogs.com/swnuwangyun/p/1997790.html
Copyright © 2011-2022 走看看