ARC工作时?编译还是运行时?

Ale*_*lov 3 objective-c automatic-ref-counting swift

在ARC(自动引用计数)工作时在Objective-C或Swift中?在编译阶段还是在运行时阶段?那为什么重要呢?

Sha*_*ain 8

从 Apple过渡到 ARC 发行说明

ARC是一个编译器特性,它提供了 Objective-C 对象的自动内存管理。

您不必记住何时使用保留、释放和自动释放,ARC 会评估对象的生命周期要求,并在编译时自动为您插入适当的内存管理调用。编译器还会为您生成适当的 dealloc 方法。

启用 ARC 的类示例:

@interface Person : NSObject
@property NSString *firstName;
@property NSString *lastName;
@end

@implementation Person

// ARC insert dealloc method & associated memory 
// management calls at compile time.
- (void)dealloc
{
    [super dealloc];
    [_firstName release];
    [_lastName release];
}

@end
Run Code Online (Sandbox Code Playgroud)

  • 真正的答案是在编译时和运行时。发出的代码使得一帧可以知道另一个执行帧是否为 ARC,并在可能的情况下避免使用自动释放池。 (4认同)

Ale*_*ica 6

编译器在编译时插入必要的retain/ release调用,但是这些调用在运行时执行,就像其他任何代码一样。