我使用dispatch_async方法在主队列中执行任务。但它导致保留周期:
以下是代码段:
self.test = ^{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"%@", self);
});
};
我无法正确创建保留周期的原因。由于我的控制器没有dispatch_async块的所有权。
答案 0 :(得分:1)
尝试使用weakSelf
:
__weak typeof(self) weakSelf = self;
self.test = ^{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"%@", weakSelf);
});
};
答案 1 :(得分:0)
如果您不希望外部块保留self
,但希望内部块能够在调度后保持self
活着,可能是这样的:
typeof(self) __weak weakSelf = self;
self.test = ^{
typeof(self) strongSelf = weakSelf;
if (strongSelf) {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"%@", strongSelf);
});
}
};