【问题标题】:didReceiveMemoryWarning is not called in some view controllers in UINavigationController's view controller stack在 UINavigationController 的视图控制器堆栈中的某些视图控制器中未调用 didReceiveMemoryWarning
【发布时间】:2012-08-26 14:26:50
【问题描述】:

我用视图控制器 A 作为根视图控制器制作了 UINavigationViewController,然后推送视图控制器 B。 当我在模拟器中模拟内存警告时,只调用了 A 的 didReceiveMemoryWarning。当然,我在 A 和 B 中都覆盖了 didReceiveMemoryWarning。 最终,我通过在 A 的 didReceiveMemoryWarning 中调用 B 的 didReceiveMemoryWarning 解决了这个问题。但是我不知道为什么会自动调用 B 的方法。 A 的 viewDidUnload 和 B 的 viewDidUnload 都按预期调用,因为我在从 B 呈现模态视图控制器时触发了警告。

如果视图控制器 B 是导航控制器的根,调用它的 didReceiveMemoryWarning 没有问题。

【问题讨论】:

    标签: ios didreceivememorywarning


    【解决方案1】:

    我见过的最常见的原因是:

    • 您在您的一个视图控制器中调用[[NSNotificationCenter defaultCenter] removeObserver:self]。您不应该这样做,因为UIViewController 会注册此类通知。

    • 您对视图控制器层次结构做了一些奇怪的事情,例如在不使用 iOS 5 包含方法或普通视图控制器表示方法(presentViewController: 和朋友)的情况下将另一个视图控制器的视图添加为子视图。

    【讨论】:

    • 同意。如果做pushViewController,你不应该有这个问题。但是有太多的开发者在做addSubview...
    • 感谢您的建议。然而,他们都没有解决我的问题。 :( 我已经删除了所有“removeObserver:self”调用,并且已经使用 pushViewController 从 A 呈现视图控制器 B。
    • 你说B的viewDidUnload调用正确。该调用的堆栈跟踪是否包括内存警告通知?我认为通常是这样。也许这会给你一些线索来判断你的视图控制器是否实际上正在接收该通知。 (didReceiveMemoryWarning 有错别字吗?)
    • @JesseRusak 感谢您的建议。 =) 不过,我对 iOS 平台和 Xcode 环境还是很陌生。我会尝试弄清楚按照您的建议做,并添加有关它的 cmets。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 2011-01-07
    • 2012-08-11
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多