美文网首页
block引用变量造成循环引用解决方案

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

作者: figure_ai | 来源:发表于2016-10-16 14:35 被阅读0次
//创建一个本地变量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 修饰的变量在块中保存的是变量的地址。(其他为变量的值)

相关文章

网友评论

      本文标题:block引用变量造成循环引用解决方案

      本文链接:https://www.haomeiwen.com/subject/tuooyttx.html