0

使用:Xcode 4.6 Storyboards ARC Model segue to 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:] <<< 2013-04-22 16:42:03.589 xxxxxxxx[xxxxxxx] <<< 离开 -[ GraphViewController 设置视图:] >>>

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

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

谢谢

4

1 回答 1

2

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

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

编辑后:

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

于 2013-04-23T03:08:42.187 回答