总结:一个 block 实际是一个结构体,跟对象很像(也要考虑内存管理),但不等同于对象(可以参考runtime.h的objc_class),它主要由一个 isa 和 一个 impl 和 一个 descriptor 组成。
1 xocde创建c程序block1.c:
#include <stdio.h>
int main()
{
^{ printf("Hello, World!\n"); } ();
return 0;
}
2 终端输入:clang -rewrite-objc block1.c,则在当前目录生成block的cpp文件;则可查看block的底层实现;
block的总结结构:
struct Block_layout {
void *isa;// 指向block的运行时的类
int flags;
int reserved;
void (*invoke)(void *, ...);//方法的实现
struct Block_descriptor *descriptor;//描述
/* Imported variables. */
};
struct Block_descriptor {
unsigned long int reserved;
unsigned long int size;
void (*copy)(void *dst, void *src);
void (*dispose)(void *);
};