Blocks

来源:互联网 发布:windows me序列号 编辑:程序博客网 时间:2024/04/30 11:08

--------Blocks

1.Block的简单使用

//返回类型变量名 参数列表  ^插入符 返回类型参数类型 函数体

 int (^blocks)(int a) = ^ int (int a) {};

(1)定义block

    int (*p)(int, int);

(2)block赋值

    block = ^(int age, float height){

        

        NSLog(@"block执行了");

        

        return 0;

    };

(3)block调用

    //回调

    int result = block(23, 1.80);

    NSLog(@"result = %d", result);

2.Block的内存管理

   引用局部变量:

(1)block引用局部变量时,该变量会作为常量编码到block块中


(2)局部变量需要使用__block修饰,才能在block块中修改

即:block调用局部基本数据类型变量,进入到block里面,变量会变成常量;如果添加了关键字__block,那么在block里面变量就是同一个变量,那么我们就可以修改(我们也可以替换成static)


(3)block调用局部OC对象,该对象会被retain(注意:block在堆上才会起retain作用)

          block在栈上不会做retain操作,只有当copy到堆内存中才会起作用

         此时如果局部变量OC对象用__block修饰,则不会被retain


(4)在block里面引用一个实例变量时,该对象所在的对象会被retain


0 0