Block相关面试问题:
什么是 Block?
block是将函数及其执行上下文封装起来的对象
Block里面有isa指针 所以是一个对象
Block的调用即是函数的调用
Block截获变量
局部变量
基本数据类型 ---> 截获其值
对象类型 ---> 连同所有权修饰符一起截获
静态局部变量
以指针形式截获局部变量
全局变量 && 静态全区变量
不截获
__Block 修饰符相关问题
什么情况需要 __block ??
一般情况下, 对截获变量进行赋值的操作添加__block修饰符
__Block修饰符作用
笔试题:
他修饰的变量变成了对象
forwarding 指针用来干什么的???
Block内存管理
栈上的block的销毁
栈上的Block Copy操作
栈上的__block变量的Copy操作
栈上的__forwarld指针指向堆上的 __block变量
堆上的__forwarding指针指向自己,必须对栈上 变量 Copy 才能改变__forwarding指针
__forwarding指针存在的意义
不论在审核内存位置
都可以顺利的访问同一个__block变量
Block循环引用
MRC下 不会产生循环引用
ARC会产生循环引用,引起内存泄漏
解决方案