【问题标题】:Released UIViewController is correctly destroyed but its -(void)dealloc method is not invoked已发布的 UIViewController 已正确销毁,但未调用其 -(void)dealloc 方法
【发布时间】:2012-10-09 10:29:03
【问题描述】:

当我释放 UIViewController 时,UIViewController 被正确销毁,但它的 dealloc 方法没有被调用。

如果 UIViewController 已被销毁(在控制台中为 nil),则保留计数应为 0,因此我希望调用 -(void)dealloc 方法。

我还检查了我的 UIViewController 的子类,在不调用超类方法的情况下覆盖了 dealloc,但事实并非如此。

这是我初始化它的方式:

myViewController = [[MyViewController alloc] initWithViewController:statusPicker];

可能是什么原因? 谢谢

【问题讨论】:

  • 它是 nil 意味着你指向它的指针是 nil。如果 dealloc 没有被调用,说明它没有被正确释放。
  • @Lefteris 自动参考计数 = 否

标签: objective-c ios


【解决方案1】:

如果 UIViewController 已被销毁(在控制台中为 nil), 那么保留计数应该为0,因此我希望 -(void)dealloc 方法被调用。

嗯,不。成为nil 的事实并不意味着UIViewController 已经发布。简单来说,UIViewController 的指针现在指向了nil,但是UIViewController 所在的内存仍然被占用。可能会发生两件事,而不是被称为 dealloc

1) 还有其他东西与 UIViewController 的引用有关(例如:当您从 A 中 pushViewController B 时,A 得到了对 B 的引用)。

2) 你有内存泄漏。

我再次根据你所说的来回答:

@Lefteris 自动引用计数 = 否

【讨论】:

  • 我还要添加一行 不要依赖 retainCount - 你不知道它是如何实现的!
【解决方案2】:

检查您是否没有任何循环引用。例如,如果您的视图控制器实现了委托协议,请检查您的代码是否没有保留此委托。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-28
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多