为了加快 for in 语句的效率, 启用了ARC的编译器不会在下面句子中 retain obj
下面代码:
for (NSObject *obj in array) { … }
下面代码:
for (NSObject *obj in array) {
obj = nil;
…
}
如果编译通过,在obj = nil 时会release掉obj, 会崩溃。
为了安全,编译器不会让上面语句编译通过。 因此需要显式添加 __strong
for (NSString * __strong str in array) {
str = nil;
…
} // 正确
但这里添加 __strong 会影响效率. 应该考虑是否真有必要改变数组元素的值。
转自:ARC对for-in语句的处理(有改动)