全面解析Objective-C中的block代码块的使用

2020-01-14 17:18:34于海丽

 

全面解析Objective-C中的block代码块的使用

3.编译器中的block

3.1 block的数据结构定义

我们通过大师文章中的一张图来说明:

全面解析Objective-C中的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_layout就是对block结构体的定义:

 

isa指针:指向表明该block类型的类。

flags:按bit位表示一些block的附加信息,比如判断block类型、判断block引用计数、判断block是否需要执行辅助函数等。

reserved:保留变量,我的理解是表示block内部的变量数。