两种变体都完全一样吗?
变式1:
for(id<MyAwesomeProtocol> obj in [self.instances copy]) {
...
}
变体2:
NSArray *instancesCopy = [self.instances copy];
for(id<MyAwesomeProtocol> obj in instancesCopy) {
...
}
变量1中的复制方法[self.instances copy]
是否会为每个循环多次调用?
它只会在循环开始时执行一次吗?所以这使得像变种2这样的代码非常不必要?我是对的吗?
我认为我感到困惑,因为正常的for循环中的条件语句将在每个循环上执行。而不是写:
for (NSUInteger i = 0; i < [self.instances count]; i++) {
}
出于性能原因,可能更好(在某些情况下)缓存计数一次:
for (NSUInteger i = 0, count = [self.instances count]; i < count; i++) {
}
对于LLVM 6.0(Xcode 6.0,iOS 8.0),这仍然适用吗?或者这样的代码会由编译器优化吗?
PS:我不确定如何用我的愚蠢问题标题;)