美文网首页
尝试分析Block结构

尝试分析Block结构

作者: 给点阳光 | 来源:发表于2019-04-21 15:29 被阅读0次

将以下代码变换为C++源代码,使用“clang -rewrite-objc main.m”操作。
说是C++,其实也仅仅是使用了struct结构,其本质上是C语言源代码。
main.m文件:

#import <Foundation/Foundation.h>
int main()
{
    void (^blk)(void)= ^{printf("Block\n");};
    blk();
    return 0;
}

转换后的main.cpp文件:

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) {
  printf("Block\n");
}


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()
{
    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);
    return 0;
}


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

相关文章

  • 尝试分析Block结构

    将以下代码变换为C++源代码,使用“clang -rewrite-objc main.m”操作。说是C++,其实也...

  • OC:深入探究 block

    主要分析了block在持有__block、__weak、__strong修饰的对象时,block结构发生的变化。 ...

  • Block结构分析

    将Xcode中文件转换为C++文件 第一步:打开终端,输入xcodebuild -showsdks 展示sdks...

  • 九、Block之(一)Block内部结构及调用本质

    一、Block内部数据结构 1.调用分析 2.关于block调用中 block->FunPrt()的理解 bloc...

  • 5. block

    目录 Block底层解析什么是block?block编译转换结构block实际结构block的类型NSConcre...

  • Block技巧与底层解析

    目录 Block底层解析什么是block?block编译转换结构block实际结构block的类型NSConcre...

  • swift底层探索 09 - Block捕获外界变量原理

    本文中分析两个问题:1. Block闭包是一个引用类型2. Block捕获外部变量 1、Block结构 1.1 I...

  • Block理解

    1: 什么是block?1.0: Block的语法1.1: block编译转换结构1.2: block实际结构 2...

  • block源码分析一

    源码结构分析部分 1.block实际的结构体部分(本体) 首先impl和Desc也是两个结构体,而__main_b...

  • 探究block本质

    记录一下,分六个方面来探究block,一步步分析。 一.block底层结构写一个最简单的block: c++重写:...

网友评论

      本文标题:尝试分析Block结构

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