美文网首页
Objective-C block的实现

Objective-C block的实现

作者: 幸运的小强本人 | 来源:发表于2016-03-04 08:18 被阅读42次

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

    相关文章

      网友评论

          本文标题:Objective-C block的实现

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