美文网首页
Block 的使用及如何避免循环引用

Block 的使用及如何避免循环引用

作者: Kx_ | 来源:发表于2018-03-13 10:27 被阅读0次

一、Block的使用
我一般都是声明为一个属性来使用

typedef void(^CallBackBlock)(NSString *taskIdentifier);
@property (nonatomic, copy) CallBackBlock block;//需要拷贝到栈中
//使用
if (self.block) {
    self.block = ^(NSString *taskIdentifier) {
      //doSomething
    };
}
self.block();

二、避免循环引用
1、如果我们需要在block的方法体内使用self,我们一般都要重新建一个weakSelf来弱引用当前的self,为了避免self被提前释放,我们一般都需要在block的方法体内在定义一个strongSelf,strongSelf其实是一个局部变量,它的生命周期是在block的方法体结束后销毁,所以起到一种保证在block执行完之前,self不会被回收的效果,使得代码的稳定性提高,当block结束后,self也会被回收,不会造成循环引用。

if (self.block) {
    __weak __typeof__(self) weakSelf = self;
    self.block = ^(NSString *taskIdentifier) {
        __strong __typeof__(weakSelf) strongSelf = weakSelf;
        weakSelf.identifier = @"123";
    };
}

相关文章

  • iOS中block详解 weakSelf , strongSel

    在block中避免循环引用 我们知道,在使用block的时候,为了避免产生循环引用,通常需要使用weakSelf和...

  • __block与__weak的真正区别

    block下循环引用的问题 __block本身并不能避免循环引用,避免循环引用需要在block内部把__block...

  • __block和__weak修饰符的区别

    block下循环引用的问题 __block本身并不能避免循环引用,避免循环引用需要在block内部把__block...

  • __block与__weak的区别

    block下循环引用的问题 __block本身并不能避免循环引用,避免循环引用需要在block内部把__block...

  • __block 和__ weak 的区别

    1:在 block 下循环引用的问题.○ __block 本身并不能避免循环引用,避免循环引用需要在block内部...

  • Block 的使用及如何避免循环引用

    一、Block的使用我一般都是声明为一个属性来使用 二、避免循环引用1、如果我们需要在block的方法体内使用se...

  • block中的weak&strong self

    在block中使用self的时候,需要在外部将self弱化,从而不让block持有self,避免循环引用。循环引用...

  • iOS 小知识总结

    1.避免循环引用 如果【block内部】使用【外部声明的强引用】访问【对象A】, 那么【block内部】会自动产生...

  • 避免Block的循环引用

    避免Block的循环引用 什么是循环引用,什么时候发生循环引用 1 循环引用就是当self 拥有一个block的...

  • iOS Block __block说明符

    系列文章:iOS Block概念、语法及基本使用iOS Block实现原理iOS Block存储域及循环引用 上一...

网友评论

      本文标题:Block 的使用及如何避免循环引用

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