美文网首页
关于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