我在radar://6296108中报告了这个(NSEnumerators的快速枚举是缓慢的),但它被返回为Not To Be Fixed。原因是快速枚举预取一组对象,如果你只想枚举枚举器中的一个给定点(例如,直到找到一个特定的对象,或满足条件),并在跳出循环后使用相同的枚举器,通常情况下会跳过几个对象。
如果你正在为OS X 10.6 / iOS 4.0及以上版本编码,你也可以选择使用基于块的api来枚举数组和其他集合:
[array enumerateObjectsUsingBlock:^(id object, NSUInteger idx, BOOL *stop) {
// do something with object
}];
//NSArray
NSArray *arrData = @[@1,@2,@3,@4];
// 1.Classical
for (int i=0; i< [arrData count]; i++){
NSLog(@"[%d]:%@",i,arrData[i]);
}
// 2.Fast iteration
for (id element in arrData){
NSLog(@"%@",element);
}
// 3.Blocks
[arrData enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"[%lu]:%@",idx,obj);
// Set stop to YES in case you want to break the iteration
}];
let arrayNumbers = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
// 1
for (index, value) in arrayNumbers.enumerated() {
print(index, value)
//... do somthing with array value and index
}
//2
for value in arrayNumbers {
print(value)
//... do somthing with array value
}