关于block简单说明

block 是指向结构体的指针

block是指向结构体的指针

//block变量 匿名函数

//block 简单分为3种

//全局静态区Block

//1.MRC下当声明的block实现部分没有引入外界的任何局部变量, 或者引入全局变量或者static静态变量 那么该block位于全局静态区, 此时block的内存不需要管理, 程序运行结束时.内存被系统回收

//栈区block

//2.当block中引入一个局部变量(基础类型 和对象类型), 此时的block位于栈区, 出了函数的作用域, 该内存就被释放, 执行回调的时候, 使用栈区的block很危险, 容易造成野指针问题, 这也是为什么block要用copy 的原因

//堆区block

//3.对栈区的block进行copy操作, 此时block内存就会由栈区迁徙到堆区(Malloc), 对全局静态区的block的进行copy, 此时block还在 全局静态区


关于面试时经常出现的block的 猜值问题

//当我们局部变量前面加上static 和__block或者全局变量的时候, 他们在传入结构体时候, 相当于传入一个变量指针, 所以当我们在调用之前改变a的值的时候, 结果会发生变化

//当栈区的block引用的是一个对象类型的局部变量, 当进行copy, 内存迁徙到堆区的时候, 会对所引用的对象类型引用计数+1, 所以(MRC)堆区的block内存需要释放 最好用

Block_release(myBlock);


void (^myBlock)() = ^{

     

void (^myBlock)() = ^{

            NSLog(@"49班很棒, p1.age = %ld", p1.age);

        };

        NSLog(@"%@", myBlock);

      NSLog(@"49班很棒, p1.age = %ld", p1.age);

        };

        NSLog(@"%@", myBlock);





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值