美文网首页
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";
        };
    }
    

    相关文章

      网友评论

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

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