美文网首页
block(二)解决循环引用的三种方式

block(二)解决循环引用的三种方式

作者: 周二头 | 来源:发表于2018-11-29 16:18 被阅读0次

    1.weakself弱引用self

    // 第一种解决方式 weak+ weak - Strong-dance
    __weak typeof(self) weakSelf = self;
    self.block = ^{
    NSLog(@"%@",weakSelf.name);
    //续租 延长生命周期 strong
    // __strong typeof (self) strongSelf = weakSelf;
    };//性能差
    2.___block修饰对象 《要在block内置空对象,而且block必须调用》 --->MRC下也是使用此方法

    //第二种解决方式 mrc:__block
    __block ViewController *weakVC = self;   //栈区拷贝到堆区,内存空间重新拷贝一份。__block自动捕捉到堆里面去,是它特有的属性
    //weakvc->self--block--weakVC
    self.block = ^{
        NSLog(@"%@",weakVC.name);
        //续租  延长生命周期 strong
        //      __strong typeof (self) strongSelf = weakSelf;
        weakVC = nil;
    
    };//性能差
    self.block();
    

    3.传对象self作参数,已提供给代码块使用

    //第三种方式 传递self 想:为什么会产生循环引用 self->block->self
    self.block = ^(ViewController *vc) {
    NSLog(@"%@",vc.name);
    };
    self.block(self);

    相关文章

      网友评论

          本文标题:block(二)解决循环引用的三种方式

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