【问题标题】:IOS:Memory footprint increases when switching between views (ARC enabled)IOS:在视图之间切换时内存占用增加(启用ARC)
【发布时间】:2012-05-13 07:52:00
【问题描述】:

我是 X-code 的新手,一直在到处搜索并尝试“一切”但没有运气。 如果你能帮助我,我会为你唱首歌:)

我正在制作一个占用大量内存的 iPad 应用程序。该项目的大小约为 100mb(许多图像),但活动监视器显示,在我在所有视图(xib 文件)之间切换后,我使用了高达 140mb 的“真实内存”:(

每次在视图(xib 文件)之间切换时,我的内存占用都会增加。 ARC 已启用,因此我无法从内存中释放上一个视图。我有 10 个页面(xib 文件)可以切换。

我正在使用此代码在 xib 文件之间切换:

viewController2 *view2 = [[viewController2 alloc] initWithNibName:@"viewController2" bundle:nil];
view2.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:view2 animated:YES];

当我切换回或切换到下一个视图时,我使用相同类型的代码。

我尝试使用[self dismissModalViewControllerAnimated:NO];[self.view removeFromSuperview];self.view = nil;,但内存不断增加。

据我了解,视图堆叠在一起导致内存增加。

如何切换到下一个视图(xib 文件)并同时终止第一个视图的内存使用?

这个问题让我把头发都拔掉了:(

【问题讨论】:

    标签: ios views automatic-ref-counting xib


    【解决方案1】:

    我有一个包含 40 个不同全屏视图控制器的应用。这是一种交互式幻灯片放映,其中每张幻灯片都有某种交互。我已经用一个主视图控制器设置了这个应用程序,它控制在哪个时间呈现哪个单独的视图控制器。我通过将新视图控制器添加为子视图控制器并将新视图控制器的视图添加为主视图控制器视图的子视图,从一个视图控制器转换到下一个视图控制器:

    [self addChildViewController:newView];
    [self.view addSubview:newView.view];
    

    self 是主视图控制器。然后我使用UIViewtransitionWithView:duration:options:animations:completion: 类方法来显示新视图。在完成块中,视图和视图控制器被移除,允许 ARC 处理该内存(只要这些对象没有其他强引用):

    void (^theCompletion)(BOOL) = ^(BOOL finished) { 
        [oldView.view removeFromSuperview]; 
        [oldView removeFromParentViewController]; 
    };
    

    【讨论】:

    • thanx Mr. Berna 我将尝试弄清楚如何在我的项目中使用您的代码:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2013-07-19
    相关资源
    最近更新 更多