关键词:1.
1、只使用 跳出所有循环,但是本次循环还会继续执行后面代码。
2、只使用跳出本次循环,但还会执行下次循环。
3、同时使用和,跳出所有循环,不执行后面所有代码。(推荐使用)
使用容器的block版本的枚举器时,内部会自动添加一个AutoreleasePool:
NSArray *array = @[@"111", @"222", @"333"];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
/* 这里被一个局部@autoreleasepool包围着,不用手动实现
@autoreleasepool {
} */
if ([obj isEqualToString:@"111"]) {
}
NSLog(@"Name %@", obj);
}];
默认打印输出:
Name 111
Name 222
Name 333
1、只使用 跳出所有循环,但是本次循环还会继续执行后面代码。
NSArray *array = @[@"111", @"222", @"333"];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isEqualToString:@"111"]) {
*stop = YES;//跳出循环,但继续往下执行
}
NSLog(@"Name %@", obj);
}];
打印输出(跳出循环,其他循环不会继续执行。但依然会执行一次后面的代码):
Name 111
2、只使用跳出本次循环,但还会执行下次循环。
NSArray *array = @[@"111", @"222", @"333"];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isEqualToString:@"111"]) {
return; //跳出本次循环,不执行下面代码;但会执行下次循环。
}
NSLog(@"Name %@", obj);
}];
打印输出(第一次被截止,然后继续执行后面的循环):
Name 222
Name 333
3、同时使用和,跳出所有循环,不执行后面所有代码。
NSArray *array = @[@"111", @"222", @"333"];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isEqualToString:@"111"]) {
*stop = YES;//跳出循环,但继续往下执行
return; //跳出本次循环,不执行下面代码;但会执行下次循环。
}
NSLog(@"Name %@", obj);
}];
无打印输出(真正实现跳出循环Block)
网友评论