美文网首页
iOS 之 block(3)

iOS 之 block(3)

作者: 老猫_2017 | 来源:发表于2020-01-13 14:53 被阅读0次

前面2篇文章,是对象使用时的注意事项,那么 值类型呢?会是怎样的呢?

clang -rewrite-objc -fobjc-arc -stdlib=libc++ -mmacosx-version-min=10.10 -fobjc-runtime=macosx-10.10 -Wno-deprecated-declarations main.m -o dest.cpp
通过这个命令,可以将 .m 文件转cpp 代码,进行查看

借图block声明
    NSUInteger age = 10;
    void (^printBlock)(void) = ^ {
        NSLog(@"1 block Age is %ld", age);
    };
    NSLog(@"2 Age is %ld", age); 
    age = 100;
    NSLog(@"3 Age is %ld", age); 
    printBlock();
    NSLog(@"4 Age is %ld", age); 

1,2,3,4 各处的输出是多少? 10, 10, 100, 100
此处,在初始化block的时候,已经给出了其值,也就说block创建时,捕获到的值,此处是 10

    __block NSUInteger age = 10;
    void (^printBlock)(void) = ^ {
        NSLog(@"1 block Age is %ld", age);
        age = 300;
    };
    NSLog(@"2 Age is %ld", age);
    age = 100;
    NSLog(@"3 Age is %ld", age); 
    printBlock();
    NSLog(@"4 Age is %ld", age);

1,2,3,4 各处的输出是多少?
100,10,100,300

上面的使用,如果你都能得到才对,那说明,你对它的使用,已经比较了解了呢。那么原理是什么呢?

在使用 __block 它修饰的适合,__block NSUInteger age = 10; 变成了结构体指针的形式, block 内部,获取的到的是,指向它的指针。所以,内部的修改,会同步到外部去,而只有在调用block的适合,才会去获取当时 age 对应的值。

相关文章

网友评论

      本文标题:iOS 之 block(3)

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