博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ARC
阅读量:5079 次
发布时间:2019-06-12

本文共 1251 字,大约阅读时间需要 4 分钟。

随着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标识

 

转载于:https://www.cnblogs.com/CafeWing/p/3555480.html

你可能感兴趣的文章
POP的Stroke动画
查看>>
SQL语句在查询分析器中可以执行,代码中不能执行
查看>>
yii 1.x 添加 rules 验证url数组
查看>>
html+css 布局篇
查看>>
SQL优化
查看>>
用C语言操纵Mysql
查看>>
轻松学MVC4.0–6 MVC的执行流程
查看>>
redis集群如何清理前缀相同的key
查看>>
Python 集合(Set)、字典(Dictionary)
查看>>
获取元素
查看>>
proxy写监听方法,实现响应式
查看>>
第一阶段冲刺06
查看>>
十个免费的 Web 压力测试工具
查看>>
EOS生产区块:解析插件producer_plugin
查看>>
mysql重置密码
查看>>
jQuery轮 播的封装
查看>>
一天一道算法题--5.30---递归
查看>>
JS取得绝对路径
查看>>
排球积分程序(三)——模型类的设计
查看>>
python numpy sum函数用法
查看>>