【发布时间】:2017-10-06 08:37:44
【问题描述】:
在“deinit”方法中没有命中断点时存在主题。解决方案是将可执行代码放入其中。试过了 - 没用。
从第一个窗口发起ViewController的代码:
let vc = self.storyboard?.instantiateController(withIdentifier: "testwindow") as! NSViewController
self.presentViewControllerAsModalWindow(vc)
它会打开一个带有按钮的新窗口,单击该按钮会调用以下代码
dismissViewController(self)
这里是带断点的 deinit 代码。
僵尸对象未在方案中启用。
如果在弹出窗口再次出现时重新使用视图控制器,那将不是问题,但是每次都会创建视图控制器的新实例。
有什么办法可以确保对象被销毁?
【问题讨论】:
-
我想说你仍然有一个或多个强有力的参考指向你的 VC。这样它就不会在调用dismiss时被取消初始化。
-
@dvdblk 除了我提到的之外,我没有任何额外的代码。那是一个测试项目。故事板是否有可能以某种方式阻止其发布?
-
@Ruzard 调用dismissViewController(self) 位于哪个类中?视图的呈现者或呈现的视图。该方法的文档指出“要关闭模式窗口,请在 self(呈现视图控制器)上调用 dismissViewController(_:) 方法。”。这可能是您代码中的潜在问题。
-
@RohanBhale 显然我错过了那条线。你说得对。谢谢你。如果您可以将其作为单独的答案发布 - 我会将其标记为解决方案并提供赏金。
-
@Ruzard 请检查我的答案。
标签: swift macos memory-leaks deinit