是什么引起我的DetailViewController的强引用?

问题描述 投票:0回答:1

当用户按下后退按钮返回到主视图控制器时,我的DetailViewController未被释放。我怀疑这是因为有人强烈引用它,迫使它继续存在。每次用户往返DetailViewController时,内存中都会出现一个新的。

enter image description here

但是,对于我的一生,我找不到那个强有力的参考在哪里以及如何解决它。

这是我呈现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)


    }

enter image description here

ios swift memory memory-leaks
1个回答
-2
投票

我看过您的DetailViewController,让我给您一些建议:

[1)寻求帮助时,应删除敏感后端的apikey之类的数据

[2)您有一个庞大的Controller,这就是所谓的MASSIVE VIEW CONTROLLER,这会使您的代码难以为您和其他人(如您寻求帮助)进行调试。您需要在他自己的类中重构您的代码和抽象网络层,以便开始。

解决方案:对我来说,问题可能与通知有关,通知在离开控制器时不会被删除,但是很难用难以理解的代码来确定。离开控制器时,应始终删除观察者。尝试将其放入viewWillDisappear

NSNotificationCenter.defaultCenter().removeObserver(self)
© www.soinside.com 2019 - 2024. All rights reserved.