gpt4 book ai didi

iphone - 正确分配/取消分配 UINavigationControllerDelagate

转载 作者:可可西里 更新时间:2023-11-01 05:06:48 25 4
gpt4 key购买 nike

我有一个 UIViewController需要使用 UINavigationControllerDelegate ,特别是 willShowViewController方法。

我正在设置 <UINavigationControllerDelegate>在我的实现中,然后我在 viewDidLoad 中将委托(delegate)设置为 self (self.navigationController.delegate = self;)。然后我实现 willShowViewController方法,它工作正常,但是当 View Controller 从堆栈中弹出时,出现内存泄漏,我的应用程序崩溃了。我试过做 self.navigationController.delegate = nil;在两个viewDidUnloaddealloc但这无济于事。

在我的一个 View Controller 中实现此委托(delegate)的正确方法是什么?

最佳答案

viewDidUnload 不一定会被调用(它主要用于处理内存不足的情况)并且在调用 dealloc 时, View Controller 可能不再包含在导航 Controller ,所以 self.navigationController 将是 nil

我建议在您的 viewWillDisappear: 实现中将委托(delegate)设置为 nil(并在 viewWillAppear: 中设置它而不是 viewDidLoad).

顺便说一句,您在这里看到的是与内存泄漏完全相反的情况。内存泄漏将是无法再访问并且永远不会被释放的内存。在这里你有已经被释放的内存(你的 View Controller ),但仍然被(悬空)指针引用,导致崩溃。真正的泄漏通常不会直接导致崩溃。

关于iphone - 正确分配/取消分配 UINavigationControllerDelagate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8830440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com