美文网首页
五、block

五、block

作者: Miss_DQ | 来源:发表于2021-07-16 20:09 被阅读0次

注:本文集为自己准备面试时,系统复习的笔记,如大家有兴趣,欢迎阅读并指正
1.block有传值和传地址,局部变量是传值,如果加了__block修饰的局部变量变为传地址

  • block没有访问外部变量,即为全局区
    1.MRC下访问了外部变量为栈区,使用copy进入堆区
    2.ARC下访问了外部变量为堆区
  • __weak解决block的循环引用
  • 如果block内部调用了延时函数,需要在block内部强引用下

1.什么是block?

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

2.截获变量

局部变量

  • 基本数据类型。值传递
  • 对象类型。对于对象类型的局部变量连同所有权修饰符一起截获。值传递

静态局部变量。指针截获
全局变量。不截获
静态全局变量。不截获

3.__block修饰符
  • 一般情况下,对截获变量进行赋值操作需要添加__block修饰符。
  • 静态局部变量、全局变量、静态全局变量不需要__block修饰符。
  • __block修饰的变量变成了对象。栈上的__forwarding指向自己。栈block经copy到堆block,栈上的__forwarding 指向堆block的__block变量;堆上的__forwarding指向的是自己__block变量
  • __forwarding的总结
    不论在任何内存位置,都可以通过__forwarding顺利的访问同一个__block变量

4.Block的内存管理

  • 全局Block
    copy,什么也不做

  • 堆区block
    copy,增加引用计数

  • 栈区Block
    copy,堆区copy

  • 栈上Block的销毁

5.block的引用循环

__weak进行解决。截获局部变量对象,会连同修饰符一起截获。

相关文章

  • Block

    一、Block本质 二、 BlocK截获变量 三、__block 修饰变量 四、Block内存管理 五、Block...

  • 关于block--你想了解的几乎都在这里了

    一.block定义二.block的本质三.block变量捕获(Capture)四.block的类型五.block的...

  • block使用及其底层原理

    一 block基本使用 二 block底层结构 三 block变量捕获 四 block的类型 五 block对象类...

  • 五、block

    注:本文集为自己准备面试时,系统复习的笔记,如大家有兴趣,欢迎阅读并指正1.block有传值和传地址,局部变量是传...

  • block 基本使用

    一、函数指针的作用 二、block的定义与调用方式 三、typedef block 四、block 修饰符 五、b...

  • iOS原理(五)----block

    iOS原理(五)----block block的本质 block本质上也是一个OC对象,它内部也有个isa指针, ...

  • block 记录

    2015年12月11日星期五 block 的性质 block与delegate的区别说到底,block是函数(转码...

  • Block笔记(五)

    截获对象 这一篇我们来看一下Block截获对象。 id类型的变量相当于默认附有__strong修饰符,超出作用域对...

  • 十三、Block之(五)Block的__block的细节

    一、__block的细节 1.__block的修饰的变量地址是_Block_byref变量名_0结构体的地址,还是...

  • iOS开发之Block原理探究

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

网友评论

      本文标题:五、block

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