2

Let's say I have a method called test.

test{
    NSString *answer = [[NSString alloc] initWithString:@"VALUE 1"];
    answer = [[NSString alloc] initWithString:@"VALUE 2"];
}

When answer got reinitialized, what happens to the memory of the first initialization under ARC?

4

1 回答 1

2

第一个字符串被释放(在 中创建的字符串[[NSString alloc] initWithString:@"VALUE 1"];

answer在这种情况下是具有很强所有权资格的对象。因此,从文档中,这就是您分配给时会发生的情况answer

对于 __strong 对象,首先保留新的指针;其次,左值加载了原始语义;第三,新的指针对象以原始语义存储到左值中;最后,旧指针被释放。这不是原子执行的;面对并发加载和存储,必须使用外部同步来确保安全。

于 2013-08-09T20:07:51.280 回答