我正在尝试使用自定义segue和工具栏创建自己的容器视图版本,该工具栏可以在UICollectionViewController和UITableViewController之间切换。
经过几次尝试后,我开始工作,似乎表现得应该如此,但后来我注意到我没有考虑正确清理我的观点,孩子风险投资等等。
我非常努力地遵循我所遵循的教程示例背后的逻辑(Ray Wenderlich的iOS教程5和6)但我仍然认为我没有释放内存,因为我应该使用removeFromParentViewController和removeFromSuperview消息。
为了更好地理解我的代码在这里的工作方式,我是一个屏幕截图,也是一个简短的视频:
该应用:
切换VC时的内存使用情况:
显示该视频的视频:
以下是处理视图层次结构并清理的代码部分(覆盖自定义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时那样):
也许我并没有完全理解这些概念,但由于每次开关的记忆力都会上升,我的印象是我的清理不正确或者至少它缺少一些东西。
你能看到我错过的东西吗?
答案 0 :(得分:1)
分析时选择“泄漏”以检查内存泄漏。现在您正在检查内存分配,并且由于新对象的初始化,在视图切换之间内存使用量会增长是正常的。你应该避免的事情是在视图之间连续切换后不断的内存增长