我有一个 UIViewController
需要使用 UINavigationControllerDelegate
,特别是 willShowViewController
方法。
我正在设置 <UINavigationControllerDelegate>
在我的实现中,然后我在 viewDidLoad
中将委托(delegate)设置为 self (self.navigationController.delegate = self;
)。然后我实现 willShowViewController
方法,它工作正常,但是当 View Controller 从堆栈中弹出时,出现内存泄漏,我的应用程序崩溃了。我试过做 self.navigationController.delegate = nil;
在两个viewDidUnload
和 dealloc
但这无济于事。
在我的一个 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/