Objective-C 之 基于块的遍历方式

  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来并发执行遍历操作,无需另外编写代码,简直是福音,其他的遍历方法都无法实现这一点。所以,如果遇到需要遍历的情况,此种方法是首选。

推荐阅读更多精彩内容