美文网首页麦子面试题精选转载iOSblock
iOS面试题:Block中可以修改全局变量,全局静态变量,局部静

iOS面试题:Block中可以修改全局变量,全局静态变量,局部静

作者: iOS猿_员 | 来源:发表于2019-02-25 22:29 被阅读554次

原文:iOS面试题大全

  • 可以.深入研究Block捕获外部变量和__block实现原理

    • 全局变量和静态全局变量的值改变,以及它们被Block捕获进去,因为是全局的,作用域很广
    • 静态变量和自动变量,被Block从外面捕获进来,成为__main_block_impl_0这个结构体的成员变量
    • 自动变量是以值传递方式传递到Block的构造函数里面去的。Block只捕获Block中会用到的变量。由于只捕获了自动变量的值,并非内存地址,所以Block内部不能改变自动变量的值。
    • Block捕获的外部变量可以改变值的是静态变量,静态全局变量,全局变量
    • Block就分为以下3种
      • _NSConcreteStackBlock:只用到外部局部变量、成员属性变量,且没有强指针引用的block都是StackBlock。 StackBlock的生命周期由系统控制的,一旦返回之后,就被系统销毁了,是不持有对象的
        • _NSConcreteStackBlock所属的变量域一旦结束,那么该Block就会被销毁。在ARC环境下,编译器会自动的判断,把Block自动的从栈copy到堆。比如当Block作为函数返回值的时候,肯定会copy到堆上
      • _NSConcreteMallocBlock:有强指针引用或copy修饰的成员属性引用的block会被复制一份到堆中成为MallocBlock,没有强指针引用即销毁,生命周期由程序员控制,是持有对象的
      • _NSConcreteGlobalBlock:没有用到外界变量或只用到全局变量、静态变量的block为_NSConcreteGlobalBlock,生命周期从创建到应用程序结束,也不持有对象
  • ARC环境下,一旦Block赋值就会触发copy,__block就会copy到堆上,Block也是__NSMallocBlock。ARC环境下也是存在__NSStackBlock的时候,这种情况下,__block就在栈上

  • ARC下,Block中引用id类型的数据有没有__block都一样都是retain,而对于基础变量而言,没有的话无法修改变量值,有的话就是修改其结构体令其内部的forwarding指针指向拷贝后的地址达到值的修改

相关文章

  • block为啥可以修改全局变量而局部变量修改需要加__blcok

    block为啥可以修改全局变量而局部变量修改需要加__blcok block可以修改全局变量,是因为全局变量放在推...

  • iOS面试题:Block中可以修改全局变量,全局静态变量,局部静

    原文:iOS面试题大全 可以.深入研究Block捕获外部变量和__block实现原理全局变量和静态全局变量的值改变...

  • block

    一篇文章看懂iOS代码块Block - 简书 在Block中可以访问局部变量 Block内访问全局变量和静态变量 ...

  • block对变量的捕获

    1:可以捕获不可以修改变量 局部变量 2:可以捕获且可以修改变量 全局变量静态变量__block修饰的局部变量 下...

  • iOS-Block变量捕获

    block对变量的捕获 1:可以捕获不可以修改变量 局部变量 2:可以捕获且可以修改变量 全局变量 静态变量 __...

  • Block捕获变量

    block捕获的变量 局部变量 静态局部变量 全局变量 静态全局变量 函数执行部分 总结 局部变量基本数据类型:捕...

  • iOS-block全局变量和局部变量的引用

    1、全局变量,block可以进行读取和修改。 2、局部变量,block只能读取,不能修改局部变量。这个时候是值传递...

  • 关于block的所有问题

    关于block捕获外部的变量 (1)局部变量(2)静态变量(3)全局变量(4)全局静态变量(6)block捕获外边...

  • iOS中的Block二

    1.变量分类: 变量可以分为:自动变量(局部变量)静态变量,全局变量,全局静态变量函数参数 2. Block的存储...

  • 2018-06-14

    ///第一种情况,不加block的情况,全局,静态,和局部变量的区别:首先全局变量global_a和静态全局变量s...

网友评论

    本文标题:iOS面试题:Block中可以修改全局变量,全局静态变量,局部静

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