简述ARC 在编译时做了哪些工作 ?
参考答案:
ARC(Automatic Reference Counting,自动引用计数)在编译时主要进行了以下工作:
- 优化内存管理操作:ARC会主动分析对象的生存期需求,并在编译时自动插入适当的内存管理方法调用的代码。例如,当发现同一个对象上执行了多次“保留”(retain)与“释放”(release)操作时,ARC可以成对的移除这两个操作,从而避免不必要的内存管理开销。
- 处理对象释放:对于方法内部创建的对象,前端编译器会在方法末尾主动添加释放(release)语句来销毁它们。而对于类具有的对象(如实例变量或属性),ARC会在dealloc方法内释放它们。
- 移除冗余操作:ARC优化器会负责移出代码中涌现的多个对retain和release的重复调用,从而进一步提高代码效率。
通过以上的编译时工作,ARC简化了开发者在内存管理上的任务,降低了由于内存管理错误导致的程序崩溃风险,同时也优化了代码的性能。需要注意的是,由于ARC会自动执行retain、release、autorelease等操作,开发者在ARC环境下直接调用这些内存管理方法是非法的。实际上,ARC在调用这些方法时,并不通过普通的Objective-C消息派发机制,而是直接调用其底层C语言版本。