ARC下block循环引用的解决方式

2019-11-01  本文已影响0人  浪淘沙008

在MRC情况下对block外的对象加上__block有两个作用:

    SeondViewController *__block ctl = [[SeondViewController alloc] init];
    ctl.testBlock = ^{
        [ctl sayHai];
        ctl = nil;
    };    
    [self.navigationController pushViewController:ctl animated:YES];

该方式的弊端是如果该block不调用,则依旧不会解除循环引用,这时__weak是个更优的选择:

    SeondViewController * ctl = [[SeondViewController alloc] init];
    SeondViewController * __weak weakCtl = ctl;
    ctl.testBlock = ^{
        [weakCtl sayHai];
    };
    [self.navigationController pushViewController:ctl animated:YES];
上一篇 下一篇

猜你喜欢

热点阅读