ios – 过渡后关闭ViewController以释放内存

我想释放我的ViewController在解除它之后使用的内存.我使用以下代码来呈现新的ViewController并关闭旧的:
let sB: UIStoryboard = UIStoryboard(name: "Main",bundle: nil)
let newVC: UIViewController = sB.instantiateViewController(withIdentifier: "MyVC")
self.present(newVC,animated: true,completion: { x in
    oldVC.dismiss(animated: false,completion: { _ in //oldVC: variable keeping track of currently visible view controller
        print("done")
    })
})

代码成功地呈现了newVC,并在关闭oldVC之后打印完成.但是,我的记忆力仍然保持在屏幕上的旧版本上.
我究竟做错了什么?

FYI

>我正在使用ENSwiftSideMenu

>由于我没有以其他方式工作,所有我的ViewControllers都是ENSideMenuNavigationController的子类

>我正在得到关于分离的视图和视图不在窗口层次结构中的控制台警告
>对于所有ViewControllers,presentationViewController和renderedViewController都为零

解决方法

检查以下问题:

>在出现新的ViewController之前,您应该关闭旧的ViewController,否则您将同时关闭新的ViewController.
Swift使用ARC管理内存. oldVC没有被释放,因为一些对象有很强的引用.举个例子,我有一个带有变量tableView的ViewController. ViewController发布时,tableView将会释放.但是同时如果将它链接到另一个尚未释放的ViewController,则即使释放了以前的ViewController,tableView也不会释放.

解:

>呈现一个UINavigationController并使用setViewController来管理您的ViewControllers的转换.
>删除oldVC的无用参考

如果你真的不明白您可以搜索

> ARC> UIViewController转换

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...