Blocks

--------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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值