iOS 多用块枚举,少用for循环
2018-04-11 本文已影响191人
WuNai
bush
//for循环遍历
NSArray *arr1 = @[@1,@2,@3,@4,@5];
for (int i = 0; i < arr1.count; ++i) {
NSLog(@"arr1[i]=%@",arr1[i]);
}
//for循环反向遍历
for (NSInteger i = arr1.count-1; i >= 0; --i) {
NSLog(@"arr1[i]=%@",arr1[i]);
}
//NSEnumerator遍历法
NSArray *arr1 = @[@1,@2,@3,@4,@5];
NSEnumerator *enumerator = [arr1 objectEnumerator];
id object;
while ((object = [enumerator nextObject]) != nil) {
NSLog(@"object=%@",object);
}
//NSEnumerator遍历法反向遍历
NSEnumerator *reverseenu = [arr1 reverseObjectEnumerator];
id object1;
while ((object1 = [reverseenu nextObject]) != nil) {
NSLog(@"object1=%@",object1);
}
//快速遍历法
NSArray *arr1 = @[@1,@2,@3,@4,@5];
for (NSObject *obj in arr1) {
NSLog(@"obj=%@",obj);
}
//快速遍历法反向遍历
for (NSObject *obj1 in [arr1 reverseObjectEnumerator]) {
NSLog(@"obj1=%@",obj1);
}
//块枚举法
NSArray *arr1 = @[@1,@2,@3,@4,@5];
[arr1 enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"idx=%zd,obj=%@",idx,obj);
}];
//块枚举法反向遍历
[arr1 enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"idx=%zd,obj=%@",idx,obj);
}];
遍历collection有四种方式。最基本的办法是for循环,其次是NSEnumerator遍历法及快速遍历法,最新、最先进的方式则是“块枚举法”。
“块枚举法”本身就能通过GCD来并发执行遍历操作,无须另行编写代码。而采用其他遍历方式则无法轻易实现这一点。
若提前知道待遍历的collection含有何种对象,则应修改块签名,指出对象的具体类型。