【发布时间】:2016-12-07 09:58:07
【问题描述】:
我的项目中有 4 个场景,page1 可以继续(类型为show)到page2,然后可以继续到page3,然后到page4,然后回到page1。
从我的故事板中,您在 1 秒内就明白了这一点:
这四个场景的控制器类是ViewController:
import UIKit
class ViewController: UIViewController {
static var count: Int = 1
var id = count
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
ViewController.count += 1
print("ViewController#\(id) inited.")
}
deinit {
print("ViewController#\(id) deinited.")
}
override func viewDidLoad() {
super.viewDidLoad()
print("ViewController#\(id) loaded.")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("ViewController#\(id) appeared.")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
print("ViewController#\(id) disappeared.")
}
}
然后我完成segue循环后(page1> page2> page3> page4> page1),它输出:
ViewController#1 inited.
ViewController#1 loaded.
ViewController#1 appeared.
ViewController#2 inited.
ViewController#2 loaded.
ViewController#2 appeared.
ViewController#1 disappeared.
ViewController#3 inited.
ViewController#3 loaded.
ViewController#3 appeared.
ViewController#2 disappeared.
ViewController#4 inited.
ViewController#4 loaded.
ViewController#4 appeared.
ViewController#3 disappeared.
ViewController#5 inited.
ViewController#5 loaded.
ViewController#5 appeared.
ViewController#4 disappeared.
这不是我想要的。我认为我的堆中有 5 个ViewControllers(因为没有调用 deinit)。事实上,我们只需要 1 个ViewController 来控制page1。我应该怎么做才能销毁我的App堆中的4个无用的ViewController?
【问题讨论】:
-
您可以更改 segue 到 page1 的代码以使 page1 成为根视图控制器,这将删除您拥有的整个视图控制器堆栈
-
它们仍然存在于堆中,因为您使用“show”进行 segue,show 表示我想要控制器,为我保留它。如果你不想要它们,你可以使用“Present Modally”而不是“show”ant 然后关闭控制器。
-
如果我通过执行从第 4 页连接到第 1 页的 segue 到达第一个视图控制器,我应该看到返回(弹出)按钮让我回到第四页吗?
-
@AhmadF 不,您不应该看到后退按钮。事实上,我的页面中没有返回按钮。
标签: ios swift uiviewcontroller segue