美文网首页IOS开发知识点
OC-简单粗暴理解Block的本质

OC-简单粗暴理解Block的本质

作者: li_礼光 | 来源:发表于2018-08-24 17:04 被阅读221次

block简单粗暴的理解

  • OC的block底层就是个OC对象,包含isa指针,封装了函数的调用.

  • OC的block的底层会捕获局部变量(auto(值传递) / static(指针传递)),简单粗暴来说就是在底层中生成一个捕获的变量. 全局的不会捕获.
    PS : 捕获的意思是,在runtime运行时创建一个新的指针.指向block中的调用的成员变量

OC的block最终继承的类型是  : NSBlock类型,有三种类型(数据段,栈,堆)

Block的类                  副本源的配置存储域      复制效果        环境
__NSConcreteStackBlock     栈                   从栈复制到堆    访问了auto变量
__NSConcreteGlobalBlock    程序的数据区域         什么都不做      没有访问auto变量
__NSConcreteMallocBlock    堆                   引用计数增加    __NSConcreteStackBlock调用了copy
  • OC的block用copy修饰,为了将block存放到堆上,引用计数+1,不会自动销毁,方便管理.

  • OC的block在MRC的时候需要考虑以上的三种类型,和调用的配置存储域,但是在ARC的环境下,编译器会自动帮我们Copy和release.

MRC的建议写法 : copy
ARC的建议写法 : strong修饰和copy修饰都可以,偏向于copy,统一MRC的写法
  • 用weak修饰的变量,拿到block中去访问,引用计数不会增加,所以不会进行copy操作,不存在强引用.

OC的block的 __block本质细节,在底层转生成一个__block_byref_xxx的指向结构体的指针.
这个新生成的结构体会保存block中的值,当调用这个block的时候,又会从这个新生成的结构体中取值

新的考虑点1 : 这里会是在runtime运行时的时候创建新的结构体对象,会对性能有一定的消耗.
新的考虑点2 : 针对考虑点1,在block中注意使用的是成员变量还是使用对象指针调用.从而考虑到要不要用block去修饰.如果是使用成员变量去修改它的值,那么就需要用__block去修饰.如果用的是对象指针,调用方法的方式,那么就不需要使用__block修饰

相关文章

  • OC-简单粗暴理解Block的本质

    block简单粗暴的理解 OC的block底层就是个OC对象,包含isa指针,封装了函数的调用. OC的block...

  • Block详解

    block的本质 先看block的简单实现 转为C++代码 查看Block的继承关系 结论: block本质上也是...

  • Block原理探究(上篇)-Block本质及存储域问题

    主要内容:1.理解Block的本质2.理解Block的存储域分类3.理解Block的Copy原理 一、探究Bloc...

  • Block简单理解

    Block块的一点总结 希望大家指正 共同进步 block是一个匿名函数 Block定义分为三个部分:返回值类型...

  • 简单理解 Block

    一、万年不变老问题:什么是 Block Block 是一段代码块,可以简单的理解为带有自动变量的 匿名函数,自动变...

  • iOS Block使用注意

    block本质是两个结构体,使用block使代码简单易读。使用Block注意: 1、block内部使用外部指针,会...

  • Block源码解析和深入理解

    Block源码解析和深入理解 Block的本质 Block是"带有自动变量值的匿名函数". 我们通过Clang(L...

  • block的简单理解

    最近的工作突然闲了下来,让我有些无所适从,突然想起好久没写的文章,拖拖拉拉今天补上一篇。 关于block,网上的文...

  • block的简单理解

    block跟swift中的闭包(closure)比较: 基本一样,都常用于值的回调,特别是在多线程的网络请求回调中...

  • iOS Block(1)-底层原理探索、block的类型和cop

    1. block的本质 我们通过一个简单的demo,解析一下block的底层原理.定义一个简单的block并调用:...

网友评论

    本文标题:OC-简单粗暴理解Block的本质

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