美文网首页
Block相关面试问题

Block相关面试问题

作者: 小行为 | 来源:发表于2018-11-26 19:36 被阅读12次

    Block相关面试问题:

    屏幕快照 2018-11-26 下午6.37.02.png

    什么是 Block?

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

    屏幕快照 2018-11-26 下午6.40.22.png

    Block里面有isa指针 所以是一个对象

    Block的调用即是函数的调用

    Block的调用即是函数的调用

    Block截获变量

    局部变量

    基本数据类型 ---> 截获其值
    对象类型 ---> 连同所有权修饰符一起截获

    静态局部变量

    以指针形式截获局部变量

    全局变量 && 静态全区变量

    不截获

    屏幕快照 2018-11-26 下午6.50.33.png

    __Block 修饰符相关问题

    什么情况需要 __block ??

    一般情况下, 对截获变量进行赋值的操作添加__block修饰符

    需要block修饰
    不需要block修饰
    __Block修饰符作用

    笔试题:


    屏幕快照 2018-11-26 下午7.01.16.png

    他修饰的变量变成了对象

    __Block修饰符后变量被修改成一个struct 栈上的forwarding指向自身

    forwarding 指针用来干什么的???

    Block内存管理

    栈上的block的销毁


    栈上的block的销毁

    栈上的Block Copy操作


    栈上的Block Copy操作

    栈上的__block变量的Copy操作

    屏幕快照 2018-11-26 下午7.07.52.png

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

    结果为24 PPT错误

    __forwarding指针存在的意义

    不论在审核内存位置
    都可以顺利的访问同一个__block变量

    Block循环引用

    屏幕快照 2018-11-26 下午7.19.25.png

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

    解决方案


    屏幕快照 2018-11-26 下午7.28.09.png

    相关文章

      网友评论

          本文标题:Block相关面试问题

          本文链接:https://www.haomeiwen.com/subject/ztciqqtx.html