运行应用程序时内存消耗不断增加

时间:2009-07-14 17:19:41

标签: iphone objective-c cocoa-touch

我的应用程序中有多个视图和各自的视图控制器。我正在做的事情如下。

以下是更具说明性的代码:

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
  View1Controller *viewController1 = [[View1Controller alloc] initWithnibName:@"View1"];
  View2Controller *viewController2 = [[View2Controller alloc] initWithnibName:@"View2"];
  View3Controller *viewController3 = [[View3Controller alloc] initWithnibName:@"View3"];

  [window addSubview:viewController1.view];
  [window makeKeyAndVisible];
}

在View1Controller文件中:

对于某些按钮操作

- (IBAction) goTOView2:(id)sender
{
  iPhoneApplicationAppDelegate *appDelegate = (iPhoneApplicationAppDelegate*) [[UIApplication sharedApplication] delegate];
  [appDelegate.window.superView removeFromSuperview];
  [appDelgate.window addSubview: appDelgate.viewController2.view];
}

同样适用于view3

我在我的应用程序委托中保留了所有这三个视图控制器。当我想切换到其他视图时,我有以下代码。

不要继续代码的语法错误。

这三个视图控制器有多个视图,带有自己的导航控制器,用于推送和弹出不同的视图。

我的问题是当我使用仪器运行此应用程序时,我看到当我从一个视图切换到另一个视图时,内存消耗不断增加。

请提前帮助并表示感谢。

3 个答案:

答案 0 :(得分:0)

在应用程序窗口中添加和删除视图不是在视图控制器之间切换的推荐方法。您应该使用UITabBar并让UITabBarController处理您的视图控制器。

您的内存消耗不断增加这一事实意味着您在应用程序运行时分配更多对象。它可能与您切换视图的方式无关。您最有可能分配对象并忘记释放它们 - 导致内存泄漏。您应该尝试使用Instruments中的Leaks工具来确定导致问题的代码行。 (或者在这里发布更多内容!)

答案 1 :(得分:0)

“泄漏”工具通常无法帮助您看到内存缓慢增长,这些通常不会泄漏但是对象会意外保留。

在“对象分配”工具中,选择“已创建且仍然存在”选项。

然后在图表中选择一个区域,在该区域中您可以看到正在使用的内存,当您预计不会创建新内存时。按照这些信息来查看正在创建您不期望的对象的内容..

另外,您说您将这些视图控制器设置为属性。这意味着你在applicationDidFinishLaunching中设置它们就像这样:

self.viewController1 = viewController1;

右?

答案 2 :(得分:0)

这一行看起来不对:

[appDelegate.window.superView removeFromSuperview];

你想要的是:

[viewController1.view removeFromSuperview];

取决于您要离开的视图。