gpt4 book ai didi

ios - 如何在 Swift 中退出 "DispatchQueue.main.asyncAfter"

转载 作者:可可西里 更新时间:2023-10-31 23:55:55 28 4
gpt4 key购买 nike

我想在调用 deinit 时退出“DispatchQueue.main.asyncAfter”。

subView.swift

DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
self.doSomething()
}

func doSomething(){
if self.subView.flgA == false { //error because subView's deinit is already called
//...
}
}

当 ViewController 执行 _ = self.navigationController?.popViewController(animated: true) 并调用 deinit 时,ViewController 中的 deinit 和 subView 首先被调用,几分钟后 doSomething( ) 被调用。我想在执行 popViewController 时停止 doSomething()。我该怎么做?

最佳答案

您可以使用此代码块安排一个计时器

let timer = Timer.scheduledTimer(withTimeInterval: 5.0, repeats: false) { [weak self] timer in
self?.doSomething()
}

popViewController 之前保持计时器并取消它,如下所示:

timer.invalidate()

注意 [weak self]self?.domeSomething() 我放在那里是为了避免对 viewcontroller 的硬引用,并阅读 Laffen 在这个。

关于ios - 如何在 Swift 中退出 "DispatchQueue.main.asyncAfter",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49894067/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com