美文网首页
2.3.1Block 的实现

2.3.1Block 的实现

作者: 石子17 | 来源:发表于2018-08-05 22:28 被阅读0次

struct __block_impl {

    void *isa;

    int Flags;

    int Reserved;

    void *FuncPtr;

};

struct __main_block_impl_0 {

    struct __block_impl impl;

    struct __main_block_desc_0* Desc;

    __main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int flags=0) {

        impl.isa = &_NSConcreteStackBlock;

        impl.Flags = flags;

        impl.FuncPtr = fp;

        Desc = desc;

    }

};

static void __main_block_func_0(struct __main_block_impl_0 *__cself) {



    int i = 1911;

}

static struct __main_block_desc_0 {

    size_t reserved;

    size_t Block_size;

} __main_block_desc_0_DATA = { 0, sizeof(struct __main_block_impl_0)};

int main(int argc, const char * argv[])

{

    void (*blk) (void) =

    ((void (*)())&__main_block_impl_0((void *)__main_block_func_0, &__main_block_desc_0_DATA));

    ((void (*)(__block_impl *))((__block_impl *)blk)->FuncPtr)((__block_impl *)blk);



    //该源码将 __main_block_impl_0 结构体类型的自动变量,即让栈上生成的 __main_block_impl_0 结构体实例的指针,赋值给 __main_block_impl_0 结构体指针类型的变量blk;

    struct __main_block_impl_0 tmp  =  __main_block_impl_0(__main_block_func_0,&__main_block_desc_0_DATA);

    struct __main_block_impl_0 *blk = &tmp;



    return 0;

}

static struct IMAGE_INFO { unsigned version; unsigned flag; } _OBJC_IMAGE_INFO = { 0, 2 };

相关文章

网友评论

      本文标题:2.3.1Block 的实现

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