注销后从内存中删除视图控制器?

Removing the view controller from memory after logging out?

我有一个水平滚动的单元格集合视图。每次我注销时,我的主视图控制器都会被关闭到登录屏幕。但是当我重新登录时,我的主视图控制器似乎从未从内存中删除。我这样说是因为我的集合视图单元格与我注销前的位置相同。

我尝试了所有方法,从 viewWillAppear 和重新加载数据,到尝试将我的登录视图控制器作为我的根 window。有什么建议吗?

(为了清楚地证明这一点,当您注销 Instagram(从设置视图控制器)时,会以模态方式显示登录视图。当您重新登录时,会显示主页提要,而不是设置视图控制器的。我想重置数据的层次结构)

class MainController: UICollectionViewController, UICollectionViewDelegateFlowLayout {

    let feedId = "feedId"

    var allUserCategory: AllUserCategory?

    override func viewDidLoad() {
        super.viewDidLoad()

        collectionView?.pagingEnabled = true
        collectionView?.backgroundColor = UIColor(r: 250, g: 250, b: 250)
        collectionView?.registerClass(AllUserCategory.self, forCellWithReuseIdentifier: feedId)

        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Log Out", style: .Plain, target: self, action: #selector(handleLogout))
        navigationItem.rightBarButtonItem?.tintColor = UIColor.blueColor()
        navigationController?.navigationBar.translucent = false

        checkIfUserLoggedIn()
    }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        self.collectionView?.reloadData()
    }

    func handleLogout() {
        print("Logged out")
        do {
            try FIRAuth.auth()?.signOut()

        } catch let logoutError {
            print(logoutError)
        }

        allUserCategory?.users.removeAll()

        let loginController = LoginController()
        let loginNav = UINavigationController(rootViewController: loginController)
        presentViewController(loginNav, animated: true, completion: nil)
    }
}

在dealloc中加入NSLog

也许您的代码 (MainViewController) 中存在一些内存泄漏。

对 IBOutlet 和自定义委托使用弱引用