基于块的遍历方式:
[ary enumerateObjectsUsingBlock:^(NSNumber *obj, NSUInteger idx, BOOL * _Nonnull stop)
{
int i = [obj intValue];
if (i == 30)
{
*stop = YES;
}
NSLog(@"输出:%d", i);
}];
NSDictionary *dict = @{@"a" : @(1), @"b" : @(2)};
[dict enumerateKeysAndObjectsUsingBlock:^(NSString *key, id _Nonnull obj, BOOL * _Nonnull stop)
{
if ([key isEqualToString:@"b"])
{
*stop = YES;
}
NSLog(@"输出:%@", obj);
}];
此方式相对其他方式有很大的优势。因为可以获取很多的信息。
并且块中的参数可以根据需要改变类型。
还可以执行反向遍历和并行遍历:
[ary enumerateObjectsWithOptions:(NSEnumerationReverse)
usingBlock:^(NSNumber *obj, NSUInteger idx, BOOL * _Nonnull stop)
{
NSLog(@"输出:%@", obj);
}];
NSEnumerationReverse是反向遍历;
NSEnumerationConcurrent是并行执行。而且他们还可以用“按位或”连接。