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并从中演示,我将测试另一个行为。