iOS-解决Block循环引用

block的循环引用问题(self ->block ->self)

定义一个block

typedef void(^MyBlock)(BlockViewController *);

typedef void(^MyBlock)();

@property (nonatomic,copy) MyBlock mblock;
1)__block
- (void)block01 {
    __block BlockViewController *blockVC = self;
    
    self.mblock = ^(){
        
        NSLog(@"mblock---%@",blockVC.name);
        
        blockVC = nil;
    };
    
    self.mblock();
}
2)__weak
- (void)block01 {
    __weak typeof(self) weakself =self;
    
    self.mblock = ^(){
        
        NSLog(@"mblock---%@", weakself.name);
    };
    
    self.mblock();
}

3)__strong
- (void)block01 {
    __weak typeof(self) weakself =self;
    
    self.mblock = ^(){
        
        __strong typeof(self) strongself = weakself;

        NSLog(@"mblock---%@", strongself.name);
    };
    
    self.mblock();
}

4)@weakify(self) @strongify(self)

YYKit和RAC

- (void)block01 {
    @weakify(self)
    
    self.mblock = ^(){
        
        @strongify(self)

        NSLog(@"mblock---%@", self.name);
    };
    
    self.mblock();
}
5)传参数
- (void)block01 {

    self.mblock = ^(BlockViewController *vc){

        NSLog(@"mblock---%@", vc.name);
    };

    self.mblock(self);
}
iOS容易造成循环引用的三种场景

1.NSTimer
2.block
3.delegate

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容