• ARC


    随着ios5之后,ARC的模式已经成了主流。前面我们知道ARC会自动帮助开发者去插入retain和release语句。ARC编译器有两个部分,分别为前端编译器和ARC优化器。

    1. 前端编译器

    前端编译器会为“拥有的”对象插入相对的release语句。如果对象的所有权修饰符是strong,那么它就是被拥有的。

    a.如果在某个方法内去创建一个对象,前端编译器会在方法末尾自动插入release语句来销毁它。

    b.对于类拥有的对象(实例变量/属性)会在dealloc方法里释放。事实上我们并不需要去写dealloc方法或者调用dealloc方法,ARC会自动帮你完成一切的。此外由ARC的编译器生成的代码甚至比我们写的release语句的性能还要好,因为编译器可以做出假设,在ARC中,没有类可以覆盖release方法,也没有调用它的必要。ARC会通过直接使用objc_release来优化调用过程。而对retain也是同样的方法,ARC会调用objc_retain来取代保留消息。

    2.ARC优化器

    虽然ARC前端编译器听起来很NB的样子,但是代码中有时仍然会出现几个对retain和release的重复调用。ARC优化器负责移除多余的retain和release语句,确保生成的代码运行速度高于手动引用计数的代码。

    --------------------------------------------------------------------- 分割线 ---------------------------------------------------------------

    前面说的是ARC的原理,下面我们看自动释放的对象具体到什么时候释放?(真正的释放机制)

    The autoreleased objects will be deallocated when, the closest enclosing autorelease pool on the stack of the thread on which the -autorelease message has been sent, gets drained or released.

    对于每个Runloop,系统都会隐式去创建一个Autorelease pool,这样所有的release pool会构成一个类似于CallStack一样的栈式结构,在每一个Runloop结束时候,当前栈顶的Autorelease pool会被销毁,这样这个pool里的每个object都会被release。

    在起用ARC的项目中,添加不需要使用ARC的文件,在compiler flags中加-fno-objc-arc标识

    在未起用ARC的项目中,添加需要使用ARC的文件,在compiler flags中加-fobjc-arc标识

  • 相关阅读:
    Shapelib库编译
    CheckedComboBoxEdit实现单选
    VS2019卡在创建Windows恢复点
    ArcGIS Add-In 创建自定义菜单
    使用DevExpress展示地图—加载SHP
    未能从程序集ESRI.ArcGIS.AddIns.SDK加载任务"ValidateAddInXMLTask"
    没有为该对象定义无参数的构造函数
    RichEditControl自定义高亮语法
    Java解析Word模版,替换${}的值
    64.QT-单播、广播、组播
  • 原文地址:https://www.cnblogs.com/CafeWing/p/3555480.html
Copyright © 2020-2023  润新知