gpt4 book ai didi

objective-c - for(;;) 与 for( :) in Objective-C Performance and Practice

转载 作者:太空狗 更新时间:2023-10-30 03:48:40 27 4
gpt4 key购买 nike

for(;;)for(:) 在 Objective-C 中的性能有什么不同吗?使用 for(;;)for(:) 的良好做法是什么?

最佳答案

我假设在每种情况下您都在枚举对象集合,因为只有 C for(;;) 形式允许枚举基本类型。 for(in) 构造使用一个名为 NSFastEnumeration 的协议(protocol)来填充缓冲区,其中包含要在未来迭代中使用的对象,并使用游标来跟踪它到达的对象。这使得它比:

NSEnumerator *e = [collection objectEnumerator];
while (id o = [e nextObject]) {
//...
}

每次迭代需要发送一条消息,而且速度比:

for (NSInteger i=0; i < [collection count]; i++) {
id o = [collection objectAtIndex: i];
//...
}

每次迭代还需要发送一条消息[*]。 for(in) 构造只需要在每次缓冲区耗尽时发送一条消息,这可能每 8 次迭代左右发送一次。

请注意,还有基于 block 的循环 [collection enumerateObjectsUsingBlock: ^(id obj, int idx, BOOL *stop){/*...*/}]; 具有不同的属性再次。特别是可以告知采用选项的此构造版本并发执行 block 。

[*]细心的读者会注意到,这实际上需要每次迭代发送两次消息,因为每次都会评估终止条件;然而,将其简化为一条消息发送非常容易,因此我们将其视为一次讨论。

关于objective-c - for(;;) 与 for( :) in Objective-C Performance and Practice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7129919/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com