OC面试题 - block相关汇总

block出现之后除了官方原有,几乎很少人再用delegate模式了,很多api也扩展了block模式,block最常见的面试分为:

1.block的基本使用方式

一般来说block都是在回调里面的

void (^block)(int) = ^(int a)
{
   NSLog(@"%d",a);
};
block(3);

不过实际开发要复杂的多了,block(3);一般是另一个类来调用,而block本身也会作为一个参数来传递,使用方式和swift的闭包基本一毛一样,不过原理来说根本就不是一回事了

2.block的原理,本质上block是个啥

block本质就是个类,因为它继承自OC对象,说白了就是一个类里面有个函数,只是因为外面进行了封装,搞不清这是个啥,因为会捕获外面的属性/变量等等,所以会导致循环引用

大概内存结构就是存储了isa和一个__block_impl类(里面有isa 和实际的block函数和一些系统内部的变量,)和一些捕获的变量,如上图所示,age就是捕获的值FuncPtr就是实际的函数

所以其实 这个block不是block类的包本身而是,而且__block_impl这个类,而block(3)这段函数就是

block->FuncPtr(3);这就是Block基本的运行原理

3.block捕获机制


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值