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