Objective-C block的实现

Block数据结构定义,如下:

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能够访问它外部的局部变量,就是因为将这些变量或其地址复制到了结构体中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 Blocks是C语言的扩充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了这...
    小人不才阅读 9,158评论 0 23
  • 原文地址:Objective-C中的Block 1.相关概念 在这篇笔记开始之前,我们需要对以下概念有所了解。 1...
    默默_David阅读 3,081评论 0 1
  • .相关概念 在这篇笔记开始之前,我们需要对以下概念有所了解。 1.1 操作系统中的栈和堆 注:这里所说的堆和栈与数...
    狼凤皇阅读 3,325评论 0 0
  • 2.1 Blcoks概要 2.1.1 什么是Blocks Blocks是C语言的扩充功能——“带有自动变量(即局部...
    SkyMing一C阅读 6,976评论 6 18
  • Blocks Blocks Blocks 是带有局部变量的匿名函数 截取自动变量值 int main(){ ...
    南京小伙阅读 4,545评论 1 3

友情链接更多精彩内容