Block分为全局Block、堆Block和栈Block
1、在定义block没有引用外部变量的时候,block为全局的(ARC和MRC)都是这样
// 内部没有调用外部变量的block
void (^block1)(void) = ^{
NSLog(@"1111");
};
2、定义block有引用到外部变量的时候,在MRC的情况下block属于栈上,容易被释放,使用的时候要copy一下,把栈上得block拷贝到堆上,在ARC的情况下,系统会自动把栈上得block拷贝到堆上,所以使用不需要copy。
//内部调用外部变量的block
int a = 10;
void (^block2)(void) = ^{
NSLog(@"%d",a);
}
3、在ARC下,使用copy与strong其实都一样,推荐使用copy。