【问题标题】:swift deinit method not callingswift deinit方法没有调用
【发布时间】:2019-09-26 23:03:02
【问题描述】:

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

popToViewcontroller deinit 方法未调用后,我尝试了以下代码导航到下一个viewController

 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上调用

【问题讨论】:

  • 请添加AuctionDetailsViewController的代码。我很确定问题是你的parentVC 变量没有weak
  • @MarcoPace 谢谢,弱 var parentVC:UIViewController?在 AuctionDetailsViewController 中声明。

标签: ios swift4.2 deinit


【解决方案1】:

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

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

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

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

有通知观察者

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

委托的使用(持有它的强引用)

如果视图控制器正在确认代理应标记为weak 的协议。

上面提到的是阻止视图控制器解除分配和 deinit 永远不会被调用的一些点。同样的原因可能还有其他原因。

【讨论】:

  • 感谢您的解决方案,我尝试了您提到的上述内容,但我仍然面临同样的问题。
猜你喜欢
  • 1970-01-01
  • 2015-10-21
  • 1970-01-01
  • 2014-08-13
  • 2018-08-13
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多