1

我是 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 文件)并同时终止第一个视图的内存使用?

这个问题让我把所有的头发都拔了出来:(

4

1 回答 1

1

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

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

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

void (^theCompletion)(BOOL) = ^(BOOL finished) { 
    [oldView.view removeFromSuperview]; 
    [oldView removeFromParentViewController]; 
};
于 2012-05-03T19:11:26.813 回答