美文网首页
Block的一些知识点

Block的一些知识点

作者: cmjdmx | 来源:发表于2021-05-27 18:03 被阅读0次

block结构

struct Block_descriptor {
    unsigned long int reserved;
    unsigned long int size;
    void (*copy)(void *dst, void *src);
    void (*dispose)(void *);
};

struct Block_layout {
    void *isa;
    int flags;
    int reserved;
    void (*invoke)(void *, ...);
    struct Block_descriptor *descriptor;
    /* Imported variables. */
};

一个 block 实例实际上由 6 部分构成:

isa 指针,所有对象都有该指针,用于实现对象相关的功能。
flags,用于按 bit 位表示一些 block 的附加信息,本文后面介绍 block copy 的实现代码可以看到对该变量的使用。
reserved,保留变量。
invoke,函数指针,指向具体的 block 实现的函数调用地址。
descriptor, 表示该 block 的附加描述信息,主要是 size 大小,以及 copy 和 dispose 函数的指针。
variables,capture 过来的变量,block 能够访问它外部的局部变量,就是因为将这些变量(或变量的地址)复制到了结构体中。

block类型

在 Objective-C 语言中,一共有 3 种类型的 block:
1、_NSConcreteGlobalBlock 全局的静态 block,不会访问任何外部变量。
2、_NSConcreteStackBlock 保存在栈中的 block,当函数返回时会被销毁。
3、_NSConcreteMallocBlock 保存在堆中的 block,当引用计数为 0 时会被销毁。
在ARC中 NSConcreteStackBlock 的 block 会被 NSConcreteMallocBlock 类型的 block 替代,使用的时候不用再调用copy方法

参考链接: https://blog.devtang.com/2013/07/28/a-look-inside-blocks/

相关文章

  • iOS Block 部分一

    主要讲解 Block 的底层实现原理; Block部分一Block部分二Block部分三Block知识点总结 基础...

  • Block的一些知识点

    block结构 一个 block 实例实际上由 6 部分构成: isa 指针,所有对象都有该指针,用于实现对象相关...

  • 关于Block的几个知识点分析说明

    前言最近复习一下Block的知识,发现一些书籍和网上的文章对Block的某些知识点的解释存在不清晰甚至存在错误。所...

  • CSS中的display属性总结

    主要写一些笔者在学习display 属性时遇到的知识点,文末会添加一些拓展阅读。 display:block 常用...

  • SDWebImage4.0源码探究(二)具体代码拓展

    代码一 知识点:block参考:iOS中block的详解weakSelf、strongSelf <转自唐巧>Blo...

  • Block 原理浅析

    Block 浅析 一、Block内存 (堆、栈、全局) 知识点: 栈区(stack)— 由编译器自动分配释放 ...

  • iOS-面试

    面试知识点 block 什么是block是将函数及其上下文封装起来的对象 block的截获变量对不同变量类型分别是...

  • 21·iOS 面试题·__block 在 ARC 和 MRC 下

    前言 对于 Block 以及 __block 相关的知识点,之前的面试题已经涉及过:04·iOS 面试题·Bloc...

  • Block的知识点

    Block对象是一个C底层的语法和运行时特性,它和标准的C函数有点相似,但除了可执行的代码它们包含变量自动绑定栈或...

  • Objective-C Block篇(二) : Block捕获自

    目录知识点 现象:打印栈上、堆上Block截获的自动变量在Block定义前中后的地址与引用计数变化 带有(截获)自...

网友评论

      本文标题:Block的一些知识点

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