__block修饰变量的时候时候 1、__block修饰本地变量转为cpp的样子 //用__block修饰的本地变量b多了这个结构体 struct __Block_byref_b_0 { //直译为本地变量b在block中是通过引用的 void *__isa; __Block_byref_b_0 *__forwarding; int __flags; int __size; int b; }; //此函数的作用是将栈上的b copy 到堆中 static void __main_block_copy_0(struct __main_block_impl_0*dst, struct __main_block_impl_0*src) { _Block_object_assign((void*)&dst->b, (void*)src->b, 8/*BLOCK_FIELD_IS_BYREF*/); } //此函数的作用是将栈上的b 释放 static void __main_block_dispose_0(struct __main_block_impl_0*src) { _Block_object_dispose((void*)src->b, 8/*BLOCK_FIELD_IS_BYREF*/); } static struct __main_block_desc_0 { //描述block的信息 size_t reserved; size_t Block_size; void (*copy)(struct __main_block_impl_0*, struct __main_block_impl_0*); //函数指针 void (*dispose)(struct __main_block_impl_0*); //函数指针 }