gpt4 book ai didi

ios - 从内存中删除未使用的 ViewController

转载 作者:行者123 更新时间:2023-11-30 12:19:50 25 4
gpt4 key购买 nike

我有 3 个 ViewController。第一个 ViewController 正在检查用户是否登录。如果是,则执行到 mainVC,如果没有,则执行到登录VC。

当我在loginVC中时,我登录并执行到mainVC的Segue。

我现在想要的是,我想让所有未使用的 ViewController 被“删除”,以节省内存。这将如何运作?

我在 StackOverflow 中找到了这段代码:

class ManualSegue: UIStoryboardSegue {

override func perform() {
sourceViewController.presentViewController(destinationViewController, animated: true) {
self.sourceViewController.navigationController?.popToRootViewControllerAnimated(false)
UIApplication.sharedApplication().delegate?.window??.rootViewController = self.destinationViewController
}
}
}

这能达到我想要的效果吗?看起来是的,因为这个方法正在弹出 ViewController。

我正在使用“显示详细信息” - 仅转场,除非使用此方法时我创建了自定义转场转场。

最佳答案

删除应该由Apple处理,你(理论上)不必担心它,只要你不创建任何保留循环。一般来说, block 中不要有任何对 self 的强引用。有趣的是,上面的代码应该关闭 ViewController(并因此删除它)也有一个保留周期。根据需要添加 [weak self]strongSelf 转换应该会有所帮助:

override func perform() {
sourceViewController.presentViewController(destinationViewController, animated: true) { [weak self] in
guard let strongSelf = self else { return }
strongSelf.sourceViewController.navigationController?.popToRootViewControllerAnimated(false)
UIApplication.sharedApplication().delegate?.window??.rootViewController = strongSelf.destinationViewController
}
}

关于ios - 从内存中删除未使用的 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44932454/

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