【问题标题】:App running slow after loading viewcontroller, then unload about 15-20 times加载 viewcontroller 后 App 运行缓慢,然后卸载约 15-20 次
【发布时间】:2013-04-16 00:46:36
【问题描述】:

使用: Xcode 4.6 故事板 弧 模型转至 SecondViewController

我有一个应用程序,它的主 ViewController 会在设备向右旋转时加载一个新的 veiwController。当应用程序启动时,一切正常。如果我旋转设备,然后返回卸载 secondview 控制器,大约 15-20 倍的应用程序非常缓慢。我已经缩小范围,它仅在加载第二个视图控制器并且仅当我旋转设备数次时才会发生。我也缩小了范围,这是一个内存问题。我安装了一个应用程序来跟踪使用和可用的内存。当我多次旋转设备时,我的内存从 400mb 变为 900mb。我试图提供尽可能多的信息。每个视图都有 8 个每秒触发的 NSTimer。

有没有办法以编程方式卸载视图,以确保正在卸载?

我已包含此代码以确保加载和卸载:

`- (void)setView:(UIView *)aView { NSLog(@">>> 输入 %s PRETTY_FUNCTION);

if (!aView)         // view is being set to nil
{
    NSLog(@"Should be unloading now");
}

[super setView:aView];

NSLog(@"<<< Leaving %s >>>", __PRETTY_FUNCTION__);

}

日志结果: 2013-04-22 16:42:03.588 xxxxxxxx[xxxxxxx] >>> 进入-[GraphViewController setView:] >>

` 我不确定我需要查看什么来纠正这个问题。

任何正确方向的“点”都将不胜感激。

谢谢

【问题讨论】:

    标签: ios memory-leaks rotation viewcontroller viewdidunload


    【解决方案1】:

    您没有提供太多关于如何“卸载”SecondViewController 的信息。您是否也在对其进行模态搜索?如果是这样,那就是你的问题——每次你做一个转场,你实例化一个新的视图控制器,如果这些是模态转场,呈现的控制器有一个指向呈现控制器的强指针,所以这些控制器都不会被释放来回走动。

    作为一项规则,你不应该在情节提要中使用任何东西来倒退,而不是使用 unwind segue。因此,您的问题的解决方案是使用展开转场从 SecondViewController 回到 MainViewController - 这实际上将回到您来自的 MainViewController 的同一个实例,并且 SecondViewController 将被释放。如果您不知道如何进行放松转场,我将编辑我的答案以向您展示如何。

    编辑后:

    要放松转场,您需要做两件事。在您要返回的控制器中,添加一个方法——两个重要的事情是它是一个 IBAction,并且它有一个输入到 UIStoryboardSegue* 的参数。你怎么称呼它并不重要,它甚至不需要在里面有任何代码,尽管我通常会放入一个日志语句来确保它被调用。然后,在您要从中展开的控制器中的 IB 中,您可以控制从 UI 元素(如按钮或表格视图单元格)(或者如果您想从代码中触发它,则从控制器本身)拖动到绿色的退出图标场景的底部——重要的是要注意,您是从 UI 元素拖动到同一控制器中的退出图标,而不是控制器之间。当您松开退出图标上的拖动时,您将看到您使用我上面提到的签名创建的任何方法。选择你想要的,就是这样。如果您想将任何信息传递回目标控制器,您可以像任何其他 segue 一样在源控制器中实现 prepareForSegue。

    【讨论】:

    • 感谢您提供宝贵的信息。我不知道倒退。我没有放松的经验。如果你有样品那就太好了。再次感谢您!
    • 我没有用于加载/卸载第二个视图控制器的 UI 元素。我正在使用下面的代码。
    • @Eric,然后,正如我所说,您从控制器本身(底部栏中的图标)拖动到退出图标。在这种情况下,您需要为 segue 提供一个标识符,以便您可以在代码中使用它。
    • 对不起,我以为我做到了。再次感谢。
    猜你喜欢
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-16
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多