block引用变量造成循环引用解决方案

2016-10-16  本文已影响0人  figure_ai
//创建一个本地变量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 修饰的变量在块中保存的是变量的地址。(其他为变量的值)

上一篇 下一篇

猜你喜欢

热点阅读