关于iOS的Block类型截获自动变量值

        Blocks是C语言的扩充功能,可以这样描述Blocks:带有自动变量(局部变量)的匿名函数。很明显,匿名函数就是不带名称的函数。下面主要说得是“带有自动变量(局部变量)”,这点在Blocks中表现为“截获自动变量值”。下面上代码:

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        int value0 = 1;
        int value1 = 2;
        
        void (^myBlock)(void) = ^{
            NSLog(@"value0:%d   value1:%d", value0, value1);
        };
        
        value0 = 10;
        value1 = 20;
        
        myBlock();   //[13684:2000910] value0:1   value1:2
    }
    return 0;
}

        在上面的代码中,Block语法的表达式使用的是在Block声明之前的变量value0和value1。Blocks中,Block表达式截获所使用的自动变量的值,保存的是该自动变量的瞬间值,所以即使在声明完Block之后又修改了value0和value1的值,在Block表达式中这两个变量的值还是修改之前的,这就是自动变量值的截获。

posted @ 2015-07-22 10:03  驴车手  阅读(317)  评论(0编辑  收藏  举报