OSX 关闭视图控制器后未调用 deinit
OSX deinit is not being called after dismissing view controller
在"deinit"方法中没有命中断点时存在主题。解决方案是在里面放一个可执行代码。试过了 - 没用。
从第一个 window 开始 ViewController
的代码:
let vc = self.storyboard?.instantiateController(withIdentifier: "testwindow") as! NSViewController
self.presentViewControllerAsModalWindow(vc)
它会打开一个新的 window,其中包含一个按钮,该按钮在单击
时会调用以下代码
dismissViewController(self)
这是带有断点的 deinit 代码。
计划中未启用僵尸对象。
如果在弹出窗口再次出现时重新使用 viewcontroller,那不会有问题,但是每次都会创建视图控制器的新实例。
是否有任何事情可以确保对象被销毁?
只是尝试按照您在每个 viewController 中用于按钮的相同代码复制此代码并成功击中断点,并将 var num 从 0 (viewDidLoad) 更改为 1,然后在 deInit 中更改为 0 :
你在尝试什么?当你点击dismiss的时候,不是在调用deinit方法吗?
//主要ViewController
@IBAction func letsGo(_ sender: UIButton) {
if let vc = storyboard?.instantiateViewController(withIdentifier: "second") as? SecondViewController {
self.present(vc, animated: true, completion: nil)
}
}
// 第二视图控制器
class SecondViewController: UIViewController {
var num = 0
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
num += 1
print("\(num)")
}
@IBAction func dismissTheHype(_ sender: UIButton) {
self.dismiss(animated: true, completion: nil)
}
deinit {
print("deiniting")
num -= 1
doNothing()
print("printing number \(num)")
}
func doNothing(){
var number = 4
number += 1
print("\(number) times")
}
}
Apple 的关闭控制器的文档使用 presentViewControllerAsModalWindow()
表示 "To dismiss the modal window, call the dismissViewController(_:) method on self (the presenting view controller)."。因此,您可能会从呈现的控制器本身中解雇呈现的控制器。从呈现视图控制器调用 dismiss 会有所帮助。
在"deinit"方法中没有命中断点时存在主题。解决方案是在里面放一个可执行代码。试过了 - 没用。
从第一个 window 开始 ViewController
的代码:
let vc = self.storyboard?.instantiateController(withIdentifier: "testwindow") as! NSViewController
self.presentViewControllerAsModalWindow(vc)
它会打开一个新的 window,其中包含一个按钮,该按钮在单击
时会调用以下代码 dismissViewController(self)
这是带有断点的 deinit 代码。
计划中未启用僵尸对象。
如果在弹出窗口再次出现时重新使用 viewcontroller,那不会有问题,但是每次都会创建视图控制器的新实例。
是否有任何事情可以确保对象被销毁?
只是尝试按照您在每个 viewController 中用于按钮的相同代码复制此代码并成功击中断点,并将 var num 从 0 (viewDidLoad) 更改为 1,然后在 deInit 中更改为 0 :
你在尝试什么?当你点击dismiss的时候,不是在调用deinit方法吗?
//主要ViewController
@IBAction func letsGo(_ sender: UIButton) {
if let vc = storyboard?.instantiateViewController(withIdentifier: "second") as? SecondViewController {
self.present(vc, animated: true, completion: nil)
}
}
// 第二视图控制器
class SecondViewController: UIViewController {
var num = 0
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
num += 1
print("\(num)")
}
@IBAction func dismissTheHype(_ sender: UIButton) {
self.dismiss(animated: true, completion: nil)
}
deinit {
print("deiniting")
num -= 1
doNothing()
print("printing number \(num)")
}
func doNothing(){
var number = 4
number += 1
print("\(number) times")
}
}
Apple 的关闭控制器的文档使用 presentViewControllerAsModalWindow()
表示 "To dismiss the modal window, call the dismissViewController(_:) method on self (the presenting view controller)."。因此,您可能会从呈现的控制器本身中解雇呈现的控制器。从呈现视图控制器调用 dismiss 会有所帮助。