Objective-C现在共有四种遍历方式,for循环、for in快速遍历、NSEnumerator遍历、UsingBlock基于块的遍历。
- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOLBOOL *stop))block
这是Objective-C最新引进的一种基于block遍历方法。
NSDictionary *dict = / .... /;
[dict enumerateObjectsUsingBlock: ^(id key,id obj,BOOLBOOL *stop) {
//
if (....) {
*stop = YES;
}
}
可以看到此方式大大胜过其它方式的地方在于:遍历时可以获得更多的信息,如上所示,遍历字典时可以同时获取键和值,遍历其他类型的collection时,还可以获取到下标。另外还有一个好处,可以直接指定类型:
NSDictionary *dict = / .... /;
[dict enumerateObjectsUsingBlock: ^(NSString* key,NSString* obj,BOOLBOOL *stop) {
//
if (....) {
*stop = YES;
}
}
可以看到直接指定了两个NSString类型,在指定类型后,编译器就可以检测是否调用了错误的方法,有的话及时报错。如果知道类型,就应该这样指明类型。最重要的,这种方法本身就能通过GCD来并发执行遍历操作,无需另外编写代码,简直是福音,其他的遍历方法都无法实现这一点。所以,如果遇到需要遍历的情况,此种方法是首选。
网友评论