我刚刚发现我可以写"[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是可选,因此您可以使用选择性链接来访问变量。