gpt4 book ai didi

objective-c - 多个 NSArray 枚举

转载 作者:太空狗 更新时间:2023-10-30 03:52:54 25 4
gpt4 key购买 nike

假设我有三个相同大小的数组。我必须对所有对象做一些事情。如果我使用标准的 C 数组,我会写类似的东西

for (i = 0; i < size; i++) {
doSomething(array1[i]); // or [[array1 objectAtIndex:i] doSomething];
doSomethingElse(array2[i]); // or [[array2 objectAtIndex:i] doSomethingElse];
doSomethingReallySpecial(array3[i]); // or [[array3 objectAtIndex:i] doSomethingReallySpecial];
}

通过 Objective C,我们获得了更多循环遍历 NSArray 中对象的方法:快速枚举、基于 block 的枚举和使用枚举器。我应该使用哪一个,为什么?有什么区别?

编辑
其实这个问题可以这样表述:如果需要使用数组中某一项的索引,应该使用哪个枚举?

最佳答案

基于 NSEnumerator 的方法曾经是唯一受支持的枚举方法。我想不出它比其他方法有什么优势 - 它更慢、更笨重,并且在很大程度上已被其他方法取代。

使用 block 可以提供很大的灵 active 。一个方法可以接受一个 block 作为参数并使用它来枚举几个不同的集合:

- (void) doSomethingToFruits:(void(^)(id,NSUInteger,BOOL*))block
{
[apples enumerateObjectsUsingBlock:block];
[bananas enumerateObjectsUsingBlock:block];
[kiwis enumerateObjectsUsingBlock:block];
}

您还可以使用 enumerateObjectsUsingBlock:options: 中的选项参数来同时枚举内容。

我喜欢快速枚举的一点是,NSFastEnumeration 协议(protocol)允许我添加一个方法,它接受数组或集合(或哈希表或其他),但仍然对参数进行静态类型检查:

- (void) addObjectsFromCollection:(id<NSFastEnumeration>)coll
{
for (id obj in coll) [self addObject:obj];
}

否则,两者的语法似乎更适合不同的上下文。我发现如果一个方法的主体是在一个集合上枚举,那么如果我使用快速枚举会更清楚发生了什么,而如果我只想在一个更大的方法中间对所有内容执行一两个操作, block 更简洁,但我想这部分取决于个人喜好。

附录:

如果您想跟踪索引, block 选项接受索引作为参数。

关于objective-c - 多个 NSArray 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6001959/

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