Как остановить утечку памяти в UIView Контейнер UIViewController - PullRequest
0 голосов
/ 01 апреля 2019

У меня проблема с памятью телефона. Я пытаюсь сделать что-то вроде фрагментов Android, поэтому у меня есть представление контейнера, и когда мне нужно изменить представление, я только устанавливаю UIViewController в контейнере, но каждый раз, когда я изменяю представление контейнера, куча памяти сильно увеличивается, поэтому в 8 кликов память на айфоне уходит до 640мб. Как я могу удалить viewControllers в памяти? это мой код:

 private var activeViewController : UIViewController?{
    didSet {
      removeInactiveViewController(inactiveViewController:oldValue)
        updateActiveViewController()
           }
 }
private func removeInactiveViewController(inactiveViewController: UIViewController?){
    if let inactiveVC = inactiveViewController {
        inactiveVC.willMove(toParent: nil)
        inactiveVC.view.removeFromSuperview()
        view controller
        inactiveVC.removeFromParent()
    }
}

private func updateActiveViewController(){
    if let activeVC = activeViewController {
        var duration = 0
        addChild(activeVC)
        activeVC.view.frame = fragmentContainer.bounds
        fragmentContainer.addSubview(activeVC.view)
        activeVC.didMove(toParent: self)
    }
}

@IBAction func clickSearchs(_ sender: Any) {
    if (statusFragments != 1  && statusFragments != 0){
        prevStatusFragments = statusFragments
        statusFragments = 1
        imgSearch.isSelected = true
        imgNotif.isSelected = false
        imgRecord.isSelected = false
        imgProfile.isSelected = false
        imgOptions.isSelected = false
        if (mapViewController != nil) {
            print("Ya existia")
            mapViewController!.removeFromParent()
            mapViewController = nil
        }
        mapViewController = storyboard!.instantiateViewController(withIdentifier:
            "MapContainerViewController")
        activeViewController = mapViewController
    } else {

    }

}

@IBAction func clickNotifs(_ sender: Any) {
    print("Hizo click en notificaciones")
    if (statusFragments != 2){

        prevStatusFragments = statusFragments
        statusFragments = 2
        imgSearch.isSelected = false
        imgNotif.isSelected = true
        imgRecord.isSelected = false
        imgProfile.isSelected = false
        imgOptions.isSelected = false
        if (notifViewController != nil) {
            notifViewController!.removeFromParent()
            notifViewController!.removeFromParent()
            notifViewController = nil
        }
        notifViewController = storyboard!.instantiateViewController(withIdentifier: "NotificationsContainerViewController")
        activeViewController = notifViewController
    } else {

    }
}

1 Ответ

0 голосов
/ 01 апреля 2019

Ваш текущий код выглядит хорошо, пожалуйста, проверьте, есть ли цикл сохранения в MapContainerViewController или NotificationsContainerViewController.Я рекомендую вам проверить все замыкания и переменные, определенные в контроллерах представления.

...