分段控制内存使用情况

时间:2013-06-27 15:13:50

标签: ios memory-management segue uisegmentedcontrol

我正在尝试使用自定义segue和工具栏创建自己的容器视图版本,该工具栏可以在UICollectionViewController和UITableViewController之间切换。

经过几次尝试后,我开始工作,似乎表现得应该如此,但后来我注意到我没有考虑正确清理我的观点,孩子风险投资等等。

我非常努力地遵循我所遵循的教程示例背后的逻辑(Ray Wenderlich的iOS教程5和6)但我仍然认为我没有释放内存,因为我应该使用removeFromParentViewController和removeFromSuperview消息。

为了更好地理解我的代码在这里的工作方式,我是一个屏幕截图,也是一个简短的视频:

该应用:

enter image description here

切换VC时的内存使用情况:

enter image description here

显示该视频的视频:

YouTube link

以下是处理视图层次结构并清理的代码部分(覆盖自定义segue的perform:方法):

- (void) perform
{
    // Set source and destination view controllers
    FirstViewController *sourceViewController = (FirstViewController *) self.sourceViewController;
    UIViewController *destinationViewController = (UIViewController *) self.destinationViewController;

    // Handle child and parent view controller designation (the view controller’s view is added to the window hierarchy)
    destinationViewController.view.frame = sourceViewController.containerView.bounds;

    [sourceViewController addChildViewController:destinationViewController];

    [destinationViewController.view removeFromSuperview];

    [sourceViewController.containerView addSubview:destinationViewController.view];

    [destinationViewController didMoveToParentViewController:sourceViewController];

    // Remove actual destinationViewController from the container every time there's a transition (segue)
    [destinationViewController removeFromParentViewController];
}

我还记录了父VC上的子项数(标签栏First VC):

NSLog(@"Amount of Children: %d", [self.childViewControllers count]);

我正在检查计数是否没有上升(就像我忽略使用removeFromParentViewController时那样):

enter image description here

也许我并没有完全理解这些概念,但由于每次开关的记忆力都会上升,我的印象是我的清理不正确或者至少它缺少一些东西。

你能看到我错过的东西吗?

1 个答案:

答案 0 :(得分:1)

分析时选择“泄漏”以检查内存泄漏。现在您正在检查内存分配,并且由于新对象的初始化,在视图切换之间内存使用量会增长是正常的。你应该避免的事情是在视图之间连续切换后不断的内存增长