美文网首页iOS开发常用知识点
iOS enumerateObjectsUsingBlock:停

iOS enumerateObjectsUsingBlock:停

作者: CarrySniper | 来源:发表于2020-04-17 21:53 被阅读0次

关键词:1.\color{#FF0000}{*stop = YES;} 2.\color{red}{return;}

1、只使用\color{red}{*stop = YES;} 跳出所有循环,但是本次循环还会继续执行后面代码。
2、只使用\color{red}{return;}跳出本次循环,但还会执行下次循环。
3、同时使用\color{red}{*stop = YES;}\color{red}{return;},跳出所有循环,不执行后面所有代码。(推荐使用)

使用容器的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、只使用\color{red}{*stop = YES;} 跳出所有循环,但是本次循环还会继续执行后面代码。

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、只使用\color{red}{return;}跳出本次循环,但还会执行下次循环。

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、同时使用\color{red}{*stop = YES;}\color{red}{return;},跳出所有循环,不执行后面所有代码。

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)

相关文章

网友评论

    本文标题:iOS enumerateObjectsUsingBlock:停

    本文链接:https://www.haomeiwen.com/subject/gzpuvhtx.html