美文网首页ios 底层
Block是如何实现的?Block的数据结构是什么?__bloc

Block是如何实现的?Block的数据结构是什么?__bloc

作者: Queen_BJ | 来源:发表于2020-09-11 17:08 被阅读0次

    block本质是一个对象,底层用struct实现。
    数据结构如下:
    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. */
    };

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

    __block作用:可以获取对应变量的指针,使其可以在block内部被修改。

    __block数据结构
    struct __Block_byref_i_0 {
    void *__isa;
    __Block_byref_i_0 *__forwarding;
    int __flags;
    int __size;
    int val; //变量名
    };

    谈Objective-C block的实现

    相关文章

      网友评论

        本文标题:Block是如何实现的?Block的数据结构是什么?__bloc

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