OSX deinit не вызывается после закрытия контроллера представления
Были темы, когда точка останова не была достигнута методом "deinit". Решение состояло в том, чтобы поместить исполняемый код внутри. Попробовал это - не сработало.
Код для инициирования ViewController
из первого окна:
let vc = self.storyboard?.instantiateController(withIdentifier: "testwindow") as! NSViewController
self.presentViewControllerAsModalWindow(vc)
Это открывает новое окно с кнопкой, которая вызывает следующий код при нажатии
dismissViewController(self)
и вот код deinit с точками останова.
объекты зомби не включены в схему.
Это не будет проблемой, если viewcontroller был повторно использован, когда всплывающее окно появляется снова, однако новые экземпляры контроллера представления создаются каждый раз.
Что-нибудь нужно сделать, чтобы объект был уничтожен?
2 ответа
Документация Apple по увольнению контроллера, представленная с помощью presentViewControllerAsModalWindow()
заявляет, что "Чтобы закрыть модальное окно, вызовите метод dismissViewController(_:) для self (контроллер представления представления).". Таким образом, вы можете исключить представленный контроллер из представленного контроллера. Вызов увольнения из контроллера представления представления поможет.
Просто попытался повторить это, следуя тому же коду, который вы использовали с кнопкой в каждом viewController, и успешно нажал breakPoints, а также изменил значение переменной с 0 (viewDidLoad) на 1 и обратно на 0 в deInit:
Что вы пытаетесь сделать? Когда вы нажимаете "Отменить", разве это не вызывает метод deinit?
// Main 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")
}
}