美文网首页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