美文网首页
2020-09-08

2020-09-08

作者: 对方正在输入_0 | 来源:发表于2020-09-08 19:21 被阅读0次

    blcok 变量的声明

    @property(nonatomic,strong)void(^myBlock)();//无参无返回值

    @property(nonatomic,strong)void(^myBlock1)(NSString*);//带参数无返回值

    @property(nonatomic,strong)NSString*(^myBlock2)(NSString*);//带参数与返回值

    //定义变量

    void(^myBlock)() =nil;//无参无返回值

    void(^myBlock1)(NSString*) =nil;//带参数无返回值

    NSString*(^myBlock2)(NSString*) =nil;//带参数与返回值

    在Block中只读。Block定义时copy变量的值,在Block中作为常量使用,所以即使变量的值在Block外改变,也不影响他在Block中的值。

    int base = 100;

    BlkSum sum = ^ long (int a, int b) {

      // base++; 编译错误,只读

      return base + a + b;

    };

    base = 0;

    printf("%ld\n",sum(1,2)); // 这里输出是103,而不是3

    static变量、全局变量。如果把上个例子的base改成全局的、或static。Block就可以对他进行读写了。因为全局变量或静态变量在内存中的地址是固定的,Block在读取该变量值的时候是直接从其所在内存读出,获取到的是最新值,而不是在定义时copy的常量。

    static修饰变量,效果与_ _block一样

    static int base = 100;

    BlkSum sum = ^ long (int a, int b) {

      base++;

      return base + a + b;

    };

    base = 0;

    printf("%d\n", base);

    printf("%ld\n",sum(1,2)); // 这里输出是3,而不是103

    printf("%d\n", base);

    表明Block外部对base的更新会影响Block中的base的取值,同样Block对base的更新也会影响Block外部的base值。

    https://blog.csdn.net/LVXIANGAN/article/details/43228845

    相关文章

      网友评论

          本文标题:2020-09-08

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