使用ARC在iOS内存管理方面苦苦挣扎

时间:2017-01-12 17:26:46

标签: memory-management memory-leaks instruments xcode-instruments

我观看了2012 WWDC会议242关于使用Instruments来解决内存问题的视频,并且认为我会构建一个非常简单的应用来试验我学到的东西。

我的应用使用了一个带有两个viewControllers的故事板。第一个viewController显示UILabel和UIButton。当您按下按钮时,第二个viewController被加载,它也显示UI​​Label和UIButton,当按下它时,删除第二个viewController,以便再次显示第一个viewController。在仪器中我期望看到一些内存分配为第二个viewController被添加,然后该内存释放,以便我将回到原来使用的内存量。事实上,这是Apple演示在WWDC视频中的运作方式。

我所看到的是,因为每次按下“关闭”按钮并返回到viewController时,我都会拍摄快照,因为内存使用率会持续上升很少。它永远不会是零......总是会上升。

每次只增加大约500-700个字节,我意识到这个数字非常少,但我想知道为什么它会增加。

添加到我的第一个viewController的唯一代码是在故事板中添加名为VC2的第二个视图控制器的单一方法。

- (IBAction)addVC2:(id)sender
{
    ViewController2 *template = [self.storyboard instantiateViewControllerWithIdentifier:@"VC2"];

    [template willMoveToParentViewController:self];
    [self addChildViewController:template];
    [self.view addSubview:template.view];
    [template didMoveToParentViewController:self];
}

同样,第二个viewController(VC2)只添加了一个解除/删除它的方法:

- (IBAction)dismiss:(id)sender
{
    [self willMoveToParentViewController:nil];
    [self.view removeFromSuperview];
    [self removeFromParentViewController];
}

有一次,我向VC2添加了dealloc,以确保它被调用,它就是。

我的仪器分配设置如下:

enter image description here

我无法理解为什么内存使用会一遍又一遍地爬行。每次添加和删除第二个视图控制器时都会保留一些内容,但我无法找到它。

0 个答案:

没有答案