美文网首页
iOS中block 捕获外部局部变量分析

iOS中block 捕获外部局部变量分析

作者: 萤火驻守心间 | 来源:发表于2022-04-23 06:31 被阅读0次

    block内部能够修改的是堆中的内容, 但不能直接修改栈中的内容。若是加上__block 在运行时建立了一个外部变量的“副本”属性,把栈中的内存地址放到了堆中进而在block内部也能修改外部变量的值。

    分析:
    1、block 捕获的是当前在block内部执行的外部局部变量的瞬时值。其底层生成了一个和外部变量相同名称的属性值若是内部修改值,其实修改的是捕获以前的值,其捕获的内部的值因代码只作了一次捕获,并无作再一次的捕获,因此block里面不能够修改值。
    2、若是当前捕获的为对象类型,其block内部能够认为从新建立了一个指向当前对象内存地址的指针(堆),操控内部操做的东西均为同一块内存地址,因此能够修改当前内部的对象里面的属性,可是不能直接修改当前的指针(没法直接修改栈中的内容)(即从新生成一个新的内存地址)。其原理和捕获基本数据类型一致。

    相关文章

      网友评论

          本文标题:iOS中block 捕获外部局部变量分析

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