美文网首页
关于Block

关于Block

作者: 爱上猫的鱼 | 来源:发表于2017-02-08 16:11 被阅读0次

前段时间深受block循环引用的毒害,花时间研究下。


一、Block是C语言的一种数据类型,是一段提前准备好的代码块,在需要的时候执行。

void (^myBlock)(int) = ^(int x) {};

inlineBlock可以速记block代码块格式


二、Block的应用场景:

1⃣️返回值

2⃣️视图控制器反向传值

3⃣️自定义视图的反向传值


三、进入block后,会copy外部变量到堆中


四、block内部不允许修改外部变量的值,可以使用__block将外部变量的地址指定为堆地址,这样就可以了


五、block的保存位置

1⃣️不使用外部变量,block会保存在全局区

2⃣️使用外部变量:

*MRC:block存储在栈区,因为MRC下内存由程序员进行管理

*ARC:block存储在堆区,由编译器实现

*定义block属性的时候为何只用copy?

在MRC下,block保存在栈区,设置数值的时候才能保证将栈区的block拷贝到堆区,后来出现了ARC,也默认遵守此协议,

虽然编译器已经将其默认保存到堆区。


六、面试题:

相关文章

  • iOS面试之Block大全

    Block Block内容如下: 关于Block 截获变量 __block修饰符 Block的内存管理 Block...

  • iOS面试之Block模块

    Block Block内容如下: 关于Block 截获变量 __block修饰符 Block的内存管理 Block...

  • 详细的探讨一下Block(讨论篇、基础篇、实质篇)

    章节目录 关于Block的讨论篇 Block的基础篇 Block的实质篇 讨论篇: 为什么要看Block? 为了更...

  • 关于block(4)

    关于block(4) 标签: iOS 技术 接上篇,我们继续探究block。 block的copy属性 研究到这里...

  • block

    一.关于block block是将函数及其执行上下文封装起来的对象。 __block_impl结构体为 block...

  • 关于Block

    转化前代码 用clang命令clang -rewrite-objc testBlockM.m 关注 isa:isa...

  • 关于Block

    1.Block基本用法: block声明返回值(^block变量名)(参数)void(^block)(); blo...

  • 关于block

    block是在iOS 4.0之后出现的,封装了一段代码并将这段代码当做变量,通过block()的方式进行回调,说白...

  • 关于block

    当引用到外部的变量 1 无__block关键字时,内部直接创建一个同名变量,然后赋值。所以内部变量的地址 跟外面是...

  • 关于Block

    前段时间深受block循环引用的毒害,花时间研究下。 一、Block是C语言的一种数据类型,是一段提前准备好的代码...

网友评论

      本文标题:关于Block

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