2

UIViewController deinit方法中没有在 ios swift4.2 中调用

我已经尝试了下面的代码,以便在未调用方法中导航viewController后导航到下一个。popToViewcontroller deinit

 let data = isSearchEnabled ? repository.filteredList[index] : repository.list[index]
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    (appDelegate.window?.rootViewController as! UITabBarController).tabBar.isHidden = true
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let viewController = storyboard.instantiateViewController(withIdentifier: "AuctionDetailsViewController") as! AuctionDetailsViewController
    viewController.auction = data.getAuctionData()
    viewController.parentVC = self
    parentNavigationController?.pushViewController(viewController, animated: true)

推送视图:

deinit {
    print("AuctionDetailsViewController deallocated...")
}

上面的deinit 方法应该被调用popToViewcontroller

4

1 回答 1

1

您需要了解使用 ARC 在 iOS 上完成的内存管理。你可以在这里阅读

Deinit() 不会被调用,如果 viewcontoller...

持有对象的强引用(保留循环)

您需要检查并删除对对象的不必要的强引用以避免零售周期

有通知观察者

您需要注销观察者,因为通知中心会保留观察者,直到您注销它。

代表的用途(持有它的强参考)

如果视图控制器正在确认委托应标记为的协议weak

上面提到的是阻止视图控制器释放的一些点,并且永远不会调用 deinit。同样可能还有其他原因。

于 2019-05-09T07:24:05.267 回答