iOS是多次执行的快速枚举集合语句?

时间:2014-10-20 19:13:05

标签: ios performance for-loop foreach fast-enumeration

两种变体都完全一样吗?

变式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:我不确定如何用我的愚蠢问题标题;)

0 个答案:

没有答案