Block相关面试问题:

什么是 Block?
block是将函数及其执行上下文封装起来的对象

Block里面有isa指针 所以是一个对象
Block的调用即是函数的调用

Block截获变量
局部变量
基本数据类型 ---> 截获其值
对象类型 ---> 连同所有权修饰符一起截获
静态局部变量
以指针形式截获局部变量
全局变量 && 静态全区变量
不截获

__Block 修饰符相关问题
什么情况需要 __block ??
一般情况下, 对截获变量进行赋值的操作添加__block修饰符
需要block修饰
不需要block修饰
__Block修饰符作用
笔试题:

他修饰的变量变成了对象


forwarding 指针用来干什么的???
Block内存管理

栈上的block的销毁

栈上的Block Copy操作

栈上的__block变量的Copy操作

栈上的__forwarld指针指向堆上的 __block变量
堆上的__forwarding指针指向自己,必须对栈上 变量 Copy 才能改变__forwarding指针

__forwarding指针存在的意义
不论在审核内存位置
都可以顺利的访问同一个__block变量
Block循环引用

MRC下 不会产生循环引用
ARC会产生循环引用,引起内存泄漏
解决方案

网友评论