DispatchQueue.main.async
гарантированно выполнит предоставленное закрытие и не будет хранить ссылку на пройденное закрытие, поэтому не вызовет утечку памяти, даже если вы не отметите self
как слабое. Итак, следующее должно быть достаточно безопасным:
private var myVar = 0 {
didSet {
DispatchQueue.main.async {
if self.myVar > 0 {
}
}
}
}
Обратите внимание, что даже если ваша ссылка на объект станет равной нулю, ссылка на self
будет существовать до тех пор, пока не будет закрыто закрытие async
. Таким образом, self
будет жить до тех пор, пока блок async
не будет выполнен и не будет обработан DispatchQueue