一、__weak
- (void)func1{
__weak typeof(self) weakSelf = self;
self.block = ^{
NSString *newStr = [NSString stringWithFormat:@"6666%@",weakSelf.name];
};
self.block();
}
block持有一个weak 对象在释放的时候可以打破彼此强引用
二、__Blcok
- (void)func2{
__block ViewController *blockSelf = self;
self.block = ^{
NSString *newStr = [NSString stringWithFormat:@"6666%@",blockSelf.name];
blockSelf = nil;
};
self.block();
}
将当前对象通过__block来改变存储范围,将self的引用地址存放在堆中,在block最后设置为nil
三、传值
- (void)func3{
self.blockV2 = ^(ViewController *obj){
NSString *newStr = [NSString stringWithFormat:@"6666%@",obj.name];
};
self.blockV2(self);
}
obj是一个参数,参数存放在栈中,block执行后就给释放掉。