【问题标题】:What is the execution flow of blocks? [duplicate]区块的执行流程是什么? [复制]
【发布时间】:2013-05-03 11:32:08
【问题描述】:

我正在使用 Objective-C 块,但我无法理解下面的代码执行。

代码如下:

NSArray *array = @[@"A", @"B", @"C", @"A", @"B", @"Z", @"G", @"are", @"Q"];
NSSet *filterSet = [NSSet setWithObjects: @"A", @"Z", @"Q", nil];

BOOL (^test)(id obj, NSUInteger idx, BOOL *stop);

test = ^(id obj, NSUInteger idx, BOOL *stop) {

    if (idx < 5) {
        if ([filterSet containsObject: obj]) {
            return YES;
        }
    }
    return NO;
};

NSIndexSet *indexes = [array indexesOfObjectsPassingTest:test];
NSLog(@"indexes: %@", indexes);

输出:

indexes: <NSIndexSet: 0x10236f0>[number of indexes: 2 (in 2 ranges), indexes: (0 3)]

[array indexesOfObjectsPassingTest:test];这个方法中,test块是我传递的参数。

但是在上面的块中,test = ^(id obj, NSUInteger idx, BOOL *stop) 参数objidxstop 可以取什么值呢?他们来自哪里?

【问题讨论】:

    标签: ios objective-c macos objective-c-blocks


    【解决方案1】:

    您的数组中有 9 个项目。所以test块被执行了9次。
    每次,obj 都将是数组中的对象。 idx 将是索引。

    第一次:obj=@"A" idx=0

    第二次:obj=@"B" idx=1

    等等

    stop 是您可以写入的值,如果您想提前退出。因此,如果在第 5 次通过该街区,您就不想再这样做了。你可以做*stop=YES;

    【讨论】:

    • idx 索引值是否会像 idx=0、idx=1 一样自动采用...?
    • 谢谢你,我刚刚执行,它自动采用上述格式..非常感谢......
    猜你喜欢
    • 2014-10-24
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    相关资源
    最近更新 更多