block的循环引用

Posted 柳仙慧子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了block的循环引用相关的知识,希望对你有一定的参考价值。

1、创建block用copy修饰,拷贝到堆上

2、之前一直用这种写法,但会碰到提前释放的状态

__weak typeof(self)wakeself = self;

3、就用弱指针指向self,在block内部对weakSelf产生一个强引用,就解决了提前释放的问题

@weakify(self);

@strongify(self);

例如:

__weak __typeof(self) weakSelf = self;
self.block = ^{
    __strong __typeof(weakSelf) strongSelf = weakSelf;
    [strongSelf doSomething1];
    [strongSelf doSomething2];     
}

或者

#define WEAKSELF __weak typeof(self)weakSelf =self

#define StrongSelf __strong typeof(weakSelf) strongSelf = weakSelf

使用:

 WEAKSELF;

        [_cell setBurstBlock:^(NSInteger leftTag) {

            StrongSelf;

            [strongSelf showNavigationView:[GoodsViewController new]];

        }];

 

 

 

以上是关于block的循环引用的主要内容,如果未能解决你的问题,请参考以下文章

block-循环引用

block本质探寻八之循环引用

【OC语法】block的循环引用

block的用法和循环引用

Block的循环引用详解

block强弱引用