美文网首页
_ _block小记

_ _block小记

作者: 奔跑的喔汼 | 来源:发表于2019-04-19 15:45 被阅读0次

1)默认情况

对于 block 外的变量引用,block 默认是将其复制到其数据结构中来实现访问的。也就是说block的自动变量截获只针对block内部使用的自动变量, 不使用则不截获, 因为截获的自动变量会存储于block的结构体内部, 会导致block体积变大。特别要注意的是默认情况下block只能访问不能修改局部变量的值。

2) __block 修饰的外部变量

对于用 __block 修饰的外部变量引用,block 是复制其引用地址来实现访问的。block可以修改__block 修饰的外部变量的值。 屏幕快照 2019-04-19 下午3.35.19.png

(1)Block不访问外界变量(包括栈中和堆中的变量)
Block 既不在栈又不在堆中,在代码段中,ARC和MRC下都是如此。此时为全局块。

(2)Block访问外界变量
MRC 环境下:访问外界变量的 Block 默认存储栈中。
ARC 环境下:访问外界变量的 Block 默认存储在堆中(实际是放在栈区,然后ARC情况下自动又拷贝到堆区),自动释放。

屏幕快照 2019-04-19 下午3.38.05.png

将Block从栈上复制到堆上相当消耗CPU,所以当Block设置在栈上也能够使用时,就不要复制了,因为此时的复制只是在浪费CPU资源。

屏幕快照 2019-04-19 下午3.41.58.png

相关文章

  • block 小记

    block里面为什么要再次转化为强引用持有weak? sleep顺序很有关系: 1、如果调用test1后,异步bl...

  • Block 小记

    简介 Block 是C语言级的语法也是一个运行时特性。它和C语言的标准函数很相似,但是在有可执行的代码块的基础上它...

  • _ _block小记

    1)默认情况 对于 block 外的变量引用,block 默认是将其复制到其数据结构中来实现访问的。也就是说blo...

  • ios Block小记

    Block函数如果没有访问局部变量或者全局变量,block函数是存储在代码区的;否则会存储在栈区。但是ARC环境下...

  • 【iOS】block小记

    本篇文章并不会剖析block的原理,笔者对原理也不甚了解。 声明:对某个属性的访问(access)包括getter...

  • Block使用相关问题小记

    1、block做为属性为什么使用copy 首先,要明确的是在ARC下block作为属性采用copy和strong策...

  • iOS 由masory之Block小记

    函数式编程 TextBlock.h TextBlock.m

  • iOS开发之Block原理探究

    Block概述 Block本质 Block调用 Block分类 Block循环引用 Block原理探究 Block...

  • block的使用

    定义block 返回类型 (^block名称)(参数) = ^(){block内容}; 调用block block...

  • Block 02 - __block

    Block 02 - __block __block 的作用 __block 可以解决 Block 内部无法修改 ...

网友评论

      本文标题:_ _block小记

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