我对ARC的了解已经在今天进行了测试,我偶然发现了
this article,它在“语句嵌套”标题下有一个例子,在我看来这似乎是错误的.
在上面嵌入的示例中,用绿色下划线突出显示的行表示在函数内部分配的字符串在创建时首先获得保留计数1,然后在添加到数组时再次获得1,然后一旦数组为nil’在for循环之后,字符串的保留计数将减少1,原始字符串的保留计数为1,因此不会被解除分配.
我会假设编译器本身足够聪明,至少可以创建一个类似于最初实际上没有保留计数的对象,因为如果你刚才有
[[NSString alloc] initWithFormat:@"Name 1"]];
这个被分配的字符串没有任何指向它的字符串,并且会在自动释放池结束时释放,而不是永久保留计数为1.那么为什么它在函数的参数中会有不同的行为? (除非该行确实有一个保留计数为1,这在某种程度上是内存泄漏?否则它的保留计数可能会一直保留到其范围的最后,但是如果它的参数也是如此,则该逻辑将适用我会假设)