当用户按下后退按钮返回到主视图控制器时,我的DetailViewController未被释放。我怀疑这是因为有人强烈引用它,迫使它继续存在。每次用户往返DetailViewController时,内存中都会出现一个新的。
但是,对于我的一生,我找不到那个强有力的参考在哪里以及如何解决它。
这是我呈现DetailVC的方式
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// tableView.deselectRow(at: indexPath, animated: true)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let navController = storyboard.instantiateViewController(withIdentifier: "DetailNC") as? UINavigationController
// let controller = storyboard.instantiateViewController(withIdentifier: "DetailVC") as! DetailViewController
let controller = navController?.topViewController as! DetailViewController
let d = strategies[self.strategies.count - indexPath.row - 1] as? NSDictionary
let pass = d?.mutableCopy() as? NSMutableDictionary
pass?.setValue(IndexPath(row: (self.strategies.count - indexPath.row - 1), section: indexPath.section), forKey: "IndexPath")
controller.dict = pass
controller.legs = pass?.object(forKey: "legs") as! NSMutableArray
controller.title = tableView.cellForRow(at: indexPath)?.textLabel?.text
// controller.navigationItem.prompt = tableView.cellForRow(at: indexPath)?.detailTextLabel?.text
// self.navigationController?.pushViewController(controller, animated: true)
self.showDetailViewController(navController!, sender: self)
}
我看过您的DetailViewController,让我给您一些建议:
[1)寻求帮助时,应删除敏感后端的apikey之类的数据
[2)您有一个庞大的Controller,这就是所谓的MASSIVE VIEW CONTROLLER,这会使您的代码难以为您和其他人(如您寻求帮助)进行调试。您需要在他自己的类中重构您的代码和抽象网络层,以便开始。
解决方案:对我来说,问题可能与通知有关,通知在离开控制器时不会被删除,但是很难用难以理解的代码来确定。离开控制器时,应始终删除观察者。尝试将其放入viewWillDisappear
NSNotificationCenter.defaultCenter().removeObserver(self)