iOS UINavigationController - 从导航堆栈中删除 View Controller 确实会释放它

标签 ios uiviewcontroller uinavigationcontroller

我一直在摆弄 UINavigationController 一段时间,但现在这个问题对我来说有点棘手,

我有一个带有三个 View Controller 的 UINavigationController。

A -> B -> C

当我在 viewDidLoad() 中访问 C View Controller 时,我现在正在从堆栈中删除 B,如果我返回 C,它会转到 A,一切都按预期工作,但 B 永远不会被释放,但 C 会。

删除代码:

    if self.navigationController != nil{
        for viewController in (self.navigationController?.viewControllers)!{
            if viewController.isKindOfClass(MyVCKind.self){
                self.navigationController?.viewControllers.removeAtIndex((self.navigationController?.viewControllers.indexOf(viewController))!)
            }
        }
    }

所以我测试并分析了 B View Controller ,以确保我没有任何泄漏,当我从 B -> A 返回 B 时,一切都很好,B 被冲掉了,但问题是仅当我手动从堆栈中删除 B 时。

仅供引用,我不想设置自定义后退按钮并覆盖操作,我想要默认行为并且没有泄漏。

感谢任何帮助。

最佳答案

在我的应用程序中进行网络调用时,我发现了另一个神秘的强引用,这真的很奇怪,这就是第二个 View Controller 在修复泄漏后没有被刷新的原因,一切都按预期工作。下面的代码工作正常。

 if self.navigationController != nil{
        for viewController in (self.navigationController?.viewControllers)!{
            if viewController.isKindOfClass(MyVCKind.self){
                self.navigationController?.viewControllers.removeAtIndex((self.navigationController?.viewControllers.indexOf(viewController))!)
            }
        }
    }

关于iOS UINavigationController - 从导航堆栈中删除 View Controller 确实会释放它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39404832/

相关文章:

ios - XCUITest:自动接受系统警报。需要更多细粒度的控制

ios - UIViewController 中下载文件集合

ios - 如何从一个 View Controller 导航到另一个

iphone - 为什么在 UINavigationController 应用程序中单击返回上一屏幕时有时会丢失导航项?

ios - railscasts.com 之类的 iOS 5 编程站点

ios - RxSwift、RxCocoa 和 UITableview

ios - swift : UITextField is hidden by Keyboard

ios - 从 Storyboard 中使用 xib 调用 View Controller ?

ios - 处理容器 Controller 中 subview Controller 的 UINavigationItem 更改的最佳实践?

android - 在范围内找不到 "Greeting"