当block在栈上时,并不会对__block变量产生强引用

当block被copy到堆时

demo

当block从堆中移除时

demo

demo

对象类型的auto变量、__block变量

当block在栈上时,对它们都不会产生强引用

当block拷贝到堆上时,都会通过copy函数来处理它们

1.__block变量(假设变量名叫做a) _Block_object_assign((void*)&dst->a, (void*)src->a, 8 /BLOCK_FIELD_IS_BYREF/);

2.对象类型的auto变量(假设变量名叫做p) _Block_object_assign((void*)&dst->p, (void*)src->p, 3 /BLOCK_FIELD_IS_OBJECT/);

3.当block从堆上移除时,都会通过dispose函数来释放它们 __block变量(假设变量名叫做a) _Block_object_dispose((void*)src->a, 8 /BLOCK_FIELD_IS_BYREF/);

4.对象类型的auto变量(假设变量名叫做p) _Block_object_dispose((void*)src->p, 3 /BLOCK_FIELD_IS_OBJECT/);

int age // 占用4个字节 指针占用8个字节