Ios 呈现另一个UIViewController后,UIViewController不会取消分配
我不明白为什么Ios 呈现另一个UIViewController后,UIViewController不会取消分配,ios,swift,uikit,Ios,Swift,Uikit,我不明白为什么vc1在展示了另一个之后没有取消分配 var vc1: UIViewController! = UIViewController() weak var weakVc1 = vc1 vc1.present(UIViewController(), animated: false, completion: nil) vc1.dismiss(animated: false, completion: nil) vc1 = nil print(weakVc1) 如果我删除present
vc1
在展示了另一个之后没有取消分配
var vc1: UIViewController! = UIViewController()
weak var weakVc1 = vc1
vc1.present(UIViewController(), animated: false, completion: nil)
vc1.dismiss(animated: false, completion: nil)
vc1 = nil
print(weakVc1)
如果我删除present:animated:completion
调用,那么它将打印nil
,但在上面的场景中vc1
仍然在这里,并且没有解除分配。这意味着其他一些对象对vc1
我在操场和应用程序内部运行了这个expamle:didfishlaunchingwithoptions:
。两者的结果相同
此外,我还尝试从某个初始视图控制器(最初是从故事板实例化的)演示vc1
,在本例中,我每次都得到nil
我还试图在present
和discover
中等待完成,但没有任何帮助
所以我认为可能是一些UIWindow
实例保存了引用。但是,如果我将vc1
作为某些UIWindow
的根目录(并且事件使其成为键并可见),它仍然不会解除分配
内存图显示有一个来自VM堆栈线程0
和一些malloc
的引用,但老实说,我不明白它的意思
这是内存泄漏吗?有没有办法解除分配此视图控制器?我认为,当您呈现时,它仍然保留对vc1的强引用,因为您将其呈现给它自己。如果你想,你可以像一个主控制器一样,两者兼有?然后在主控制器上呈现vcs,而不是VC1“呈现给自己”是什么意思?我不需要两者都演示,我只想测试一个控制器演示另一个控制器,所以如果我介绍mainViewController并从中演示,我将测试另一个行为。