一、__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执行后就给释放掉。
本文详细探讨了iOS开发中__weak和__block关键字的使用。通过实例解析,展示了如何利用__weak避免强引用循环,以及__block如何改变对象的存储属性以在block内部释放引用。同时,还分析了它们在传值过程中的不同影响。
973

被折叠的 条评论
为什么被折叠?



