我有一个这样的Swift代码:
private var myVar = 0 {
didSet {
DispatchQueue.main.async { [weak self] in
if let myVar = self?.myVar {
if myVar > 0 {
// Do some UI stuff, access myVar again
}
}
}
}
}
我的问题是,我们是否总是必须经历“如果让myVar = self?.myVar”这样的痛苦,然后检查myVar,特别是在这里我们在同一个变量的didSet块中吗?
答案 0 :(得分:2)
DispatchQueue.main.async
确保执行提供的闭包,并且不会存储对传递的闭包的引用,因此即使您未将self
标记为弱也不会导致内存泄漏。因此,以下操作应足够安全:
private var myVar = 0 {
didSet {
DispatchQueue.main.async {
if self.myVar > 0 {
}
}
}
}
请注意,即使您对对象的引用变为零,对self
的引用仍将存在,直到处理async
闭包为止。因此self
将一直存在,直到async
DispatchQueue
块为止