注销后从内存中删除视图控制器?
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 和自定义委托使用弱引用
我有一个水平滚动的单元格集合视图。每次我注销时,我的主视图控制器都会被关闭到登录屏幕。但是当我重新登录时,我的主视图控制器似乎从未从内存中删除。我这样说是因为我的集合视图单元格与我注销前的位置相同。
我尝试了所有方法,从 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 和自定义委托使用弱引用