首页 > 代码库 > iOS中block循环引用问题
iOS中block循环引用问题
1、block是控制器对象的一个属性,则在block内部使用self将会引起循环应用
typedef void(^TestBlock)();@interface SecondViewController ()@property (nonatomic, copy)TestBlock testBlock;@endself.testBlock = ^() { NSLog(@"%@",self.mapView); }; self.testBlock();
2、把block内部抽出一个作为self的方法,当使用weakSelf调用这个方法,并且这个方法里有self的属性,block不会造成内存泄露
self.testBlock = ^(){ [weakSelf test];};-(void)test{ NSLog(@"%@",self.mapView);}
3、当block不是self的属性时,block内部使用self也不会造成内存泄露
TestBlock testBlock = ^(){ NSLog(@"%@",self.mapView);};[self test:testBlock];
4、当使用方法有block作为参数使用时,block内部使用self也不会造成内存泄露
- (void)viewDidLoad { [super viewDidLoad]; [self getData:^(NSString *str){ NSLog(@"%@----%@", self, str); }]; [[self class] getData:^(NSString *str) { NSLog(@"类方法--%@---%@", self, str); }];}- (void)getData:(SuccessBlock)success{ if (success) { success(@"success"); }}+ (void)getData:(SuccessBlock)success{ if (success) { success(@"success"); }}
iOS中block循环引用问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。