0

我在导航控制器上使用 setViewControllers,例如:

XYZController *xyz = [XYZController alloc] initWithXibName:@"XYZController"];
[myNavController setViewControllers:xyz];
[xyz release];

我正在检查仪器中的分配,但是我发现这个函数调用仪器中实时对象的次数会增加,如果这个函数被调用 5 次,仪器会在 #live 中显示 5 次。

这意味着它正在分配内存,我如何处理内存分配。


编辑

RootViewController *rootController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootController];
[rootController.navigationController.navigationBar setHidden:YES];
[self.myNavController setViewControllers:nil];
[self.myNavController setViewControllers:[NSArray arrayWithObjects:navController,nil]];
[rootController release];
[navController release];

这是我在应用程序中使用的实际代码。这里的问题是,每当调用这段代码时,仪器中的 rootController 活对象计数总是会增加。不仅rootController数量增加,而且类变量也没有释放,因此内存堆积。结果是我的应用程序的性能在很大程度上降低了。

请就此提出建议。

4

2 回答 2

0

首先,仪器在查看内存分配时通常会提供误报,所以我会对这些警告持保留态度。它不应该安装,因为(除了你的代码的错误)它对我来说看起来相当有效。

其次,您的代码不正确,因为myNavController(我假设是 a UINavigationController)在调用时会崩溃,setViewControllers因为它需要一个 's 数组UIViewController,而不是像上面那样的单个视图控制器。这很可能会崩溃,甚至无法编译。

检查您的代码是否有效并再次运行仪器。如果您仍然有同样的问题,它可能只是误报,应该被忽略。

于 2012-09-06T13:25:51.800 回答
0

确保不要在(NSZombiesEnabled 参数或在方案诊断中)使用僵尸测试内存使用情况。默认情况下,僵尸永远不会被删除。

于 2012-09-06T13:28:05.473 回答