block 简单使用

来源:互联网 发布:2017淘宝防举报 编辑:程序博客网 时间:2024/05/20 21:22

    int minus = 7;

    int(^myBlock)(int) = ^(int num ){

        int i = num *minus;

        NSLog(@"---%d",i);

        return i;

    };

   int t= myBlock(10);

    NSLog(@"-t==%d",t);


 1.int为返回类型

2. myBlock 为block名字

3。后面的int 为传入参数类型

4。int num 传入参数 


  1. block里面使用变量遵循以下规则:

  1. 全局变量可访问,包括在相同作用域范围内的静态变量。

  2. 传递给block的参数可访问(和函数的参数一样)。

  3. 程序里面属于同一作用域范围的堆(非静态的)变量作为const变量(即只读)。

    它们的值在程序里面的 block表达式内使用。在嵌套block里面,该值在最近的

    封闭范围内被捕获。

  4. 属于同一作用域范围内并被__block存储修饰符标识的变量作为引用传递因此是

    可变的。

  5. 属于同一作用域范围内block的变量,就和函数的局部变量操作一样。

    每次调用 block都提供了变量的一个拷贝。这些变量可以作为const来使用,或在block封闭范围内作为引用变量。



        数组

        void (^blocks[])(void) ={ ^(void){puts("hello");} ,

            ^(void){puts("hell1111");}};

        

        blocks[1](),blocks[0]();


        __block

        static int s = 10;

       __block int local =200;

        void(^p)(void) = ^(void) {

            printf("%dn",local +global);

            global ++;

            s++;

            local -- ;

        };


        p();

        printf("after local %d, global %d , s %d", local, global,s);

     

      递归  

        void (^p)(int) =0;

        static void (^ const blocks)(int) = ^(int i ){

            if (i>0) {

                printf("hello\n");

                blocks(i-1);

            }

        };

        p= blocks;

        p(3);


原创粉丝点击