【问题标题】:Managing memory warnings in IOS. Any pointers?管理 IOS 中的内存警告。任何指针?
【发布时间】:2011-12-09 23:35:43
【问题描述】:

在我的应用程序中,有时我会收到 1 级内存警告,考虑到它正在执行的工作量,我认为这是可以接受的。发生这种情况时,它会为作为 tabbarviewcontroller 一部分的视图之一调用 viewdidunload。在 viewdidunload 中,我将 outlets 设置为 nil,我认为这是完全正常的。

如果我再次尝试访问该类,就会出现问题。由于它已被释放,它将引发错误的访问错误,从而阻止我再次显示该视图。如果我不将这些出口设置为 nil,那么它不会崩溃,这是正常的,但惯例总是在 viewdidunload 中将任何出口设置为 nul。

在这种情况下处理内存警告的任何指针?我不想删除我在 viewdidunload 方法中的代码,因为它违反了约定。

我忘了补充说我是tabbarcontroller的子类>_

【问题讨论】:

    标签: iphone objective-c ios memory-management


    【解决方案1】:

    在这种情况下,当您再次加载该视图时,将再次分配添加到 xib 文件的子视图。如果您想自定义某些内容,请在 viewDidLoad 方法中进行。

    【讨论】:

    • 基本上 viewdidload 甚至不会被再次调用。一旦 tbbarcontroller 调用 setindex,它就会说控制器不在那里并且它崩溃了。
    【解决方案2】:

    被解除分配的视图在哪里分配?听起来您正在释放 viewDidUnload 中未分配的视图,例如 viewDidLoad。相反,它可能是在其他地方创建的,因此不会重新创建它,然后重新加载 viewController 的视图。

    【讨论】:

    • 这一切都是在 iB 中创建的,所以不会在 viewdidunload 中发布任何内容。我只在 viewdidunload 中设置为零。我认为问题的出现是因为我使用的自定义标签栏不适合已发布的视图控制器。我将在那里添加一个检查以重新加载视图控制器。
    • 啊,你是 UITabBarController 的子类吗?
    • 是的,我将 tabbarcontroller 子类化了
    • 我的猜测是它通常会为我重新加载它,但由于我对它进行了子类化,我可能删除了一些内存管理内容,例如在卸载视图控制器时重新加载它。
    • 那么事情就有点棘手了。苹果在其文档中说“这个类不用于子类化。”所以我认为你更安全在 viewDidUnload 中做任何事情。只需将消息传递给 [super viewDidUnload] 并让 UITabBarController 以预期的方式管理其视图控制器。你最好的选择是在子类中尽可能少地做......或者甚至考虑是否有另一种方法可以在没有显式子类的情况下做你想做的事情。
    猜你喜欢
    • 2013-06-15
    • 2023-04-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多