Block学习总结一循环引用

什么是循环引用

简单的说,就是我中有你,你中有我,虽然中华讲究阴阳共济,但是在内存中,这是不合理的。
来一段例子


Block学习总结一循环引用_第1张图片

警告提示:Capturing 'self' strongly in this block is likely to lead to a retain cycle产生循环引用

如何解决block中的循环使用

  1. 使用__weak来进行弱引用处理
 __weak typeof(self) weakSelf = self;
    NSLog(@"%p",self);
    self.block = ^{
        NSLog(@"%@",weakSelf.name);
        NSLog(@"%p",weakSelf);
    };
    
    self.block();
  1. 以参数形式进行处理
#import "ViewController.h"
typedef void(^Block)(ViewController *vc);
@interface ViewController ()
@property (nonatomic, copy) Block block;
@property (nonatomic, strong) NSString *name;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSLog(@"%p",self);
    self.block = ^(ViewController *vc){
        NSLog(@"%@",vc.name);
        NSLog(@"%p",vc);
        vc = nil;
    };
    
    self.block(self);
}
@end

你可能感兴趣的:(Block学习总结一循环引用)