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

标签 iphone objective-c ios cocoa-touch uinavigationcontroller

我有一个 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/

相关文章:

ios - 发送到实例的无法识别的选择器 - 有人可以帮助我吗?

ios - 二进制表达式的操作数无效错误

iphone - 在 iOS 上,为什么绘图不会出现在以下代码中?

iOS:在#define 中检查系统版本并做不同的事情,编译器错误

iphone - sqlite中的数据插入问题

ios - 滚动时 TableView 上的复选标记重复

objective-c - Objective-C 中什么时候我的 const 应该是静态的?

ios - Obj C 和 makeObjectsPerformSelector - 我是否忽略了什么?

ios - 有没有办法访问 x-coredata ://object returned from an NSFetchRequest? 的属性

ios - 是否有与 mkmapsnapshotter 等效的 Google map ?