Swift 中的 "[self] in" & "[weak self] in" 有什么区别?



我刚刚发现我可以写"[self]";在闭包中,而不是在中,但我不确定它是否安全。

更多详细信息:

之前:

func roundShape(corners: CACornerMask, radius: CGFloat) {
DispatchQueue.main.async { [weak self] in
layer.cornerRadius = radius
layer.maskedCorners = corners
}
}

现在:

func roundShape(corners: CACornerMask, radius: CGFloat) {
DispatchQueue.main.async { [self] in
layer.cornerRadius = radius
layer.maskedCorners = corners
}
}

所以,如果你知道其中的区别,请点亮我。

写入[self]与离开闭包是一样的,这意味着它可能会导致与[weak self]不同的保留周期,BTW不需要使用DispatchQueue.main.async {,因为GCD队列没有对self的强引用

弱自我ARC的一个概念,主要用于避免保留循环。如果直接使用self,则它会创建strong引用并且不会从内存中删除。因此,保存变量的对象将保持活动状态,并导致内存泄漏。为了克服这个问题,必须使用弱self,一旦作业完成,就会立即释放内存。

注意:弱self是可选,因此您可以使用选择性链接来访问变量。

最新更新