Objective-C ARC 次要表现

Objective-C ARC Minor Performance

我只是好奇 ARC 编译是否优化了内存性能,例如:

1| - (void)setName:(NSString *)name
2| {
3|    _name = name;
4|   if([name isEqualToString:@"Name"])
5|       NSLog(@"%@", @"It's Equal!");
6| }

与不在第 4 行第二次使用本地 name 变量的细微差别

1| - (void)setName:(NSString *)name
2| {
3|    _name = name;
4|   if([_name isEqualToString:@"Name"])
5|       NSLog(@"%@", @"It's Equal!");
6| }

ARC优化内存性能是只在第二个例子中对_name的一次赋值只在内存中保留局部name变量然后释放,还是name 保留在内存中,直到两个示例的方法都完成?希望我的问题有道理。

两组代码的唯一区别是 if 语句中使用的变量。那个小区别对 name_name 的赋值完全没有影响。你的两组代码之间的内存管理没有什么不同。

在两组代码中,行 _name = name; 基本上变为(在 ARC 下):

if (_name != name) {
    [_name release];
    _name = [name retain];
}

您的 if 语句及其使用的变量与该代码完全无关。

请记住,无论代码调用 setName: 方法,name 都是 "owned"。 setName: 方法永远不会尝试释放 name。指向 name 的对象将由任何保持对它的引用的对象保存在内存中。