Ios 在ARC中,重新初始化的对象的内存会发生什么变化?

Ios 在ARC中,重新初始化的对象的内存会发生什么变化?,ios,memory-management,automatic-ref-counting,Ios,Memory Management,Automatic Ref Counting,假设我有一个叫做test的方法 test{ NSString *answer = [[NSString alloc] initWithString:@"VALUE 1"]; answer = [[NSString alloc] initWithString:@"VALUE 2"]; } 当答案被重新初始化时,ARC下第一次初始化的内存会发生什么变化?第一个字符串被释放(在[[NSString alloc]initWithString:@“VALUE 1”];中创建的字符串) a

假设我有一个叫做test的方法

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

当答案被重新初始化时,ARC下第一次初始化的内存会发生什么变化?

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

answer
在这种情况下,是一个具有很强所有权资格的对象。因此,从中,这是分配给
答案时发生的情况:

对于强对象,首先保留新的指针对象;第二,左值具有原始语义;第三,将新的指针对象存储到具有原始语义的左值中;最后,旧指针对象被释放。这不是原子性的;必须使用外部同步来确保在并发加载和存储时的安全性


第二行有一个无关的
@
。请注意,NSString*answer=[[NSString alloc]initWithString:@“VALUE 1]”;与NSString*answer=@“值1”完全相同;它去了天堂。如果它是好的,它可能会转世为一个NSNumber或UIImage。@Catfish_-Man-不完全是这样。第一个需要创建一个包含字节“VALUE 1”的新NSString对象。第二个简单地使用“interned”文本字符串。@HotLicks,这实际上不是必需的。在这两种情况下,当前编译器/运行时都会得到一个静态分配的字符串。您知道哪些对象是ARC处理的,哪些不处理吗?ARC管理Objective-C对象,包括块。它不管理Copeoundation对象,或C++对象,或者使用[MC] OLLC分配的任何内存。这就是你的意思吗?