当前位置:网站首页>ARC在编译期和运行期做了什么
ARC在编译期和运行期做了什么
2022-07-30 17:32:00 【Billy Miracle】
除了会自动调用“保留”与“释放”方法外,使用ARC还有其他好处,它可以执行一些手工操作很难甚至无法完成的优化。
在编译期,ARC会把能够相互抵消的retain
、release
、autorelease
操作约简。如果发现在同一个对象上执行了多次“保留”与“释放”操作,那么ARC有时可以成对的移除这两个操作。ARC会分析对象的生存期需求,并在编译时自动插入适当的内存管理方法调用的代码,而不需要你记住何时使用retain
、release
、autorelease
方法。编译器还会为你生成合适的dealloc
方法。
将内存管理交由编译器和运行期组件来做,可以使代码得到多种优化。比如,ARC可以在运行期检测到autorelease
后面跟随retain
这一对多余的操作。为了优化代码,在方法中返回自动释放的对象时,会执行一个特殊函数。
一些问答
- 我应该如何看待 ARC ?它将
retains
/releases
调用的代码放在哪了?尝试不要去思考ARC将
retains
/releases
调用的代码放在哪里,而是思考应用程序算法,思考对象的strong
和weak
指针、所有权、以及可能产生的循环引用。 - 我还需要为我的对象编写
dealloc
方法吗?有时候需要。因为ARC不会自动处理
malloc
/free
、Core Foundation对象的生命周期管理、文件描述符等等,所以你仍然可以通过编写dealloc
方法来释放这些资源。你不必(实际上不能)释放实例变量,但可能需要对系统类和其他未使用ARC编写的代码调用[self setDelegate:nil]
。ARC下的dealloc
方法中不需要且不允许调用[super dealloc]
,Runtime会自动处理。 - ARC 中仍然可能存在循环引用吗?
是的,ARC自动
retain
/release
,也继承了循环引用问题。幸运的是,迁移到ARC的代码很少开始泄漏,因为属性已经声明是否retain
。 block
是如何在 ARC 中工作的?在ARC下,编译器会根据情况自动将栈上的
block
复制到堆上,比如block
作为函数返回值时,这样你就不必再调用Block Copy
。
需要注意的一件事是,在ARC下,NSString * __block myString
这样写的话,block
会对NSString
对象强引用,而不是造成悬垂指针问题。如果你要和MRC保持一致,请使用__block NSString * __unsafe_unretained myString
或(更好的是)使用__block NSString * __weak myString
。- ARC 速度上慢吗?
不。编译器有效地消除了许多无关的
retain
/release
调用,并且已经投入了大量精力来加速 Objective-C 运行时。特别的是,当方法的调用者是ARC代码时,常见的 “return a retain/autoreleased object
” 模式要快很多,并且实际上并不将对象放入自动释放池中。
边栏推荐
猜你喜欢
Daily practice------Generate 13-digit bar, Ean-13 code rule: The thirteenth digit is the check code obtained by the calculation of the first twelve digits.
Express framework connects MySQL and ORM framework
升级Win11后不喜欢怎么退回Win10系统?
测试行业干了5年,从只会点点点到了现在的测试开发,总算是证明了自己
KDD 2020 | 深入浅出优势特征蒸馏在淘宝推荐中的应用
关于内和调试无法查看ntdll内存的问题
链表Oj练习题 纯C语言
基于stm32的shell实现
Analysis and Simulation of Short Circuit Fault in Power System Based on MATLAB
想要写出好的测试用例,先要学会测试设计
随机推荐
向量检索基础方法总结
LeetCode167:有序数组两数之和
Promise入门到精通(1.5w字详解)
bean的生命周期
Various meanings of SQL's PARTITION BY syntax (with examples)
一篇文 带你搞懂,虚拟内存、内存分页、分段、段页式内存管理(超详细)
C# 跨程序传图(共享内存块传图)跨exe传图
主流的深度学习推理架构有哪些呢?
阿里SIM-基于检索的用户行为兴趣CTR模型(Search-based user Interest Model(SIM))
论文阅读之《Underwater scene prior inspired deep underwater image and video Enhancement (UWCNN)》
快使用flyway管理sql脚本吧~
Error EPERM operation not permitted, mkdir 'Dsoftwarenodejsnode_cache_cacach Two solutions
【Cloud Store Announcement】Notice of Help Center Update on July 30
阿里巴巴中国站获得1688商品分类 API
Analysis and Simulation of Short Circuit Fault in Power System Based on MATLAB
esp32系列(5):esp32 蓝牙架构学习
有效的括号字符串[贪心练习]
Microsoft Office 2019 software download and installation detailed tutorial!
中文字符集编码Unicode ,gb2312 , cp936 ,GBK,GB18030
习题:变量、常量和基本数据类型