什么是循环引用
简单的说,就是我中有你,你中有我,虽然中华讲究阴阳共济,但是在内存中,这是不合理的。
来一段例子
警告提示:Capturing 'self' strongly in this block is likely to lead to a retain cycle产生循环引用
如何解决block中的循环使用
- 使用__weak来进行弱引用处理
__weak typeof(self) weakSelf = self;
NSLog(@"%p",self);
self.block = ^{
NSLog(@"%@",weakSelf.name);
NSLog(@"%p",weakSelf);
};
self.block();
- 以参数形式进行处理
#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
网友评论