Block

Block是一种比较特殊的苹果官方推荐使用的数据类型,应用场景广泛

  • 动画
  • 多线程
  • 集合遍历
  • 网络请求回调
    作用:用来保存某一段代码,可以在恰当的时候取出来调用,功能类似于函数
格式
返回值类型 (^block变量名)(形参列表) = ^{

};
//声明Block变量,
type (^BlockName) (type, type);
BlockName = ^(type name1, type name2){

};

//调用
BlockName(name1,name2);

先借用typedef给Block定义一个变量名


应用场景
  1. 当发现代码前面和后面一样的时候,可以使用Block
void fun(^BlockName())
{
    NSLog(@"1");

    BLockName();

    NSLog(@"3");
}

void fun1()
{
    fun(^{NSLog(@"3");});
}
打印:1
     2
     3

注意:

  1. Block可以访问外部变量
  2. Block可以定义和外界定义的变量,如果有和外面同名的变量,在Block中访问的是Block的变量
  3. 默认情况下,不可以在Block中修改外界变量的值

    • 因为Block中的变量和外界的变量不是同一个变量

    • Block访问到了外界的变量,Block会将外界的变量拷贝一份到堆内存中

  4. 如果加上__block之后就是地址传递,所以可以在Block中修改外界的值

  5. 默认情况下Block储存在栈中,如果Block进行一个copy操作,Block会转移到堆中
  6. 如果Block在栈中,访问了外界的对象,那么不会对对象进行retain操作
  7. 如果Block在堆中,Block中访问了外界的对象,那么会对外界对象进行一次retain
  8. 如果在Block中访问了外界对象,一定要个对象加上__block,只要加上了__block,Block在堆中也不会对对象进行retain
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值