在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)
PushView:
deinit {
print("AuctionDetailsViewController deallocated...")
}
以上deinit
方法应在popToViewcontroller
上调用
答案 0 :(得分:0)
您需要了解使用ARC在iOS上完成的内存管理。您可以阅读此here
如果viewcontoller ...,则不会调用Deinit()...
保留对象的强引用(保留周期)
您需要检查并删除对对象的不必要的强引用,以避免零售周期
具有通知查看器
您需要注销观察者,因为通知中心会保留该观察者,直到您注销它为止。
代表的使用(对此有很强的借鉴作用)
如果视图控制器确认委托的协议应标记为
weak
。
以上提到的一些要点可以防止视图控制器取消分配和从未调用deinit。可能也有其他原因。