美文网首页
关于block中使用成员变量的循环引用问题

关于block中使用成员变量的循环引用问题

作者: 落寒z | 来源:发表于2018-07-23 13:35 被阅读20次

    定义私有变量示例代码

    typedef void(^MyBlock)(void);
    
    @interface BlockViewController ()
    {
        NSInteger _integer;
        NSString *_string;
    }
    
    @property (nonatomic, copy) MyBlock myblock;
    
    @end
    

    实现部分代码:

     _integer = 123;
        _string = @"name";
        
        //这种方式造成循环引用
        self.myblock = ^() {
            NSLog(@"%@",@(_integer));
        };
    //
        //这种方式造成循环引用
       self.myblock = ^() {
            NSLog(@"%@",_string);
        };
        
        self.myblock();
    

    上面的这种方式是会造成Block循环引用问题,原因是当前控制器对myblock是强引用,私有变量也是强引用,所以造成循环引用问题。这是我的理解

    如果Block定义并不是当前控制器的属性的时候,并不会造成循环引用问题。如下面的代码:

        MyBlock newBlock = ^() {
            NSLog(@"%@",@(_integer));
        };
        MyBlock new2Block = ^() {
            NSLog(@"%@",_string);
        };
        newBlock();
        new2Block();
    

    相关文章

      网友评论

          本文标题:关于block中使用成员变量的循环引用问题

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