-
参考文章:
-
警告提示:
capturing self strongly in this block is likely to lead to a retain cycle
-
解决方法
//创建一个本地变量blockSelf,指向self,然后用结构体语法访问实例变量
__block LCHShopTypeController *blockSelf = self;
//点击返回按钮调用的block
self.shopTypeV.backBtnBlock = ^(){
NSLog(@"点击了返回按钮");
//
LCHShopShowControllerC *vc = [LCHShopShowControllerC new];
[blockSelf presentViewController:vc animated:YES completion:nil];
};
//这样创建的blockSelf的本地变量,是弱引用
附:block使用到的变量说明
1、__strong: 赋值给这个变量的对象会自动被retain一次,如果在block中引用它,block也会retain它一次。
2、__unsafe_unretained: 赋值给这个变量不会被retain,也就是说被他修饰的变量的存在不能保证持有对象的可靠性,它可能已经被释放了,而且留下了一个不安全的指针。不会被block retain。
3、__weak:类似于__unsafe_unretained,只是如果所持有的对象被释放后,变量会自动被设置为nil,这样更安全些,不过只在IOS5.0以上的系统支持,同样不会被block retain。
4、__block: 表示这个变量能在block中被修改(值修改,而不是修改对象中的某一个属性,可以理解为修改指针的指向)。
会被自动retain。被 __block 修饰的变量在块中保存的是变量的地址。(其他为变量的值)
- **注意: **被 __block 修饰的变量在块中保存的是变量的地址。(其他为变量的值)
网友评论