MYBlock block;
{
// 默认是auto修饰
MYPerson *person = [[MYPerson alloc] init];
person.age = 10;
block = ^{
NSLog(@"---------%d", person.age);
};
}
NSLog(@"------");
- 如果block是在栈上的(访问了auto变量的block),将不会对
auto变量产生强引用 ;
- 如果block是在堆上(严格来说是栈上的block进行了copy操作,才变成了堆上的):
- 会调用block内部的
copy函数;
copy函数内部会调用_Block_object_assign函数;
_Block_object_assign函数会根据auto变量的修饰符(__strong、__weak、__unsafe_unretained)做出相应的操作,形成强引用(retain)或者弱引用。
- 会调用block内部的
dispose函数;
dispose函数内部会调用_Block_object_dispose函数;
_Block_object_dispose函数会自动释放引用的auto变量(release)。