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

//创建一个本地变量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 修饰的变量在块中保存的是变量的地址。(其他为变量的值)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容