Objective-C block的实现

Block数据结构定义,如下:

Objective-C block的实现_第1张图片
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. */
};
  • isa 指针,所有对象都有该指针,用于实现对象相关的功能。

  • flags,用于按bit位表示一些block的附加信息,本文后面会介绍在block copy的实现代码对该变凉的使用。

  • reserved, 保留。

  • invoke, 函数指针,指向具体的block实现的函数调用地址。

  • descriptor,表示该block的附加描述信息,主要是size 大小,以及copy和dispose函数指针。

  • variables,capture过来的变量,block能够访问它外部的局部变量,就是因为将这些变量或其地址复制到了结构体中。

你可能感兴趣的:(Objective-C block的实现)