zoukankan      html  css  js  c++  java
  • 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标识

  • 相关阅读:
    iframe框架
    HTML 中 id与name 区别
    使用display:inline-block产生间隙
    html5新增语义化标签
    子选择器与后代选择器的区别
    各种居中问题
    腾讯 地图 机器学习岗 春招实习123面(猝)
    腾讯 微信春招nlp实习生一面二面(猝)
    264. Ugly Number II(丑数 剑指offer 34)
    263. Ugly Number(判断是否是丑数 剑指offer34)
  • 原文地址:https://www.cnblogs.com/CafeWing/p/3555480.html
Copyright © 2011-2022 走看看