常识,记录一下,加深下印象,
我们都知道要使用__weak 来避免循环引用,
__weak typeof(self) weakSelf = self;
不过难得能够碰到一个在block中需要使用strong类型的对象,
再一个两层的block中都需要使用strong类型的数据,就更难得了,这次就碰到一个
- 这里是重点,block2中如果也要使用strong对象,那么,需要再次对weakSelf进行捕获,并进行转换,无法使用block1中的strongSelf,否则会引起循环引用
@interface MM() {
//group 定义
dispatch_group_t group;
dispatch_queue_t queue;
}
//group初始化
group = dispatch_group_create();
queue = dispatch_get_global_queue(0, 0);
// 可以确定的是,block中要使用weakSelf
__weak typeof(self) weakSelf = self;
dispatch_group_async(group, queue, ^{
// block内部需要使用strong对象的时候,通过__strong进行转换
__strong typeof(weakSelf) strongSelf = weakSelf;
dispatch_group_enter(strongSelf->group);
[weakSelf requestSummarySuccessBlock:^(SummaryModel *summaryModel) {
//这里是重点,block2中如果也要使用strong对象,那么,需要再次对weakSelf进行捕获,并进行转换,无法使用block1中的strongSelf,否则会引起循环引用
__strong typeof(weakSelf) strongstrongSelf = weakSelf;
dispatch_group_leave(strongstrongSelf->group);
} failBlock:^(NSError *error, NSString *retCode, NSString *retMsg) {
if (error) {
_error = error;
}else {
_error = [NSError errorWithDomain:HOST_DOMAIN code:retCode.integerValue userInfo:@{NSLocalizedDescriptionKey: retMsg}];
}
__strong typeof(weakSelf) strongstrongSelf = weakSelf;
dispatch_group_leave(strongstrongSelf->group);
}];
});
网友评论