UINavigation setViewControllers:内存分配

时间:2012-09-06 13:18:23

标签: objective-c ios ipad memory-management

我在navigationcontroller上使用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计数增加,而且类变量也没有被释放,因此内存堆积起来。结果是我的应用程序的性能在很大程度上降低了。

请就此提出建议。

2 个答案:

答案 0 :(得分:0)

首先,在查看内存分配时,仪器通常会提供误报,所以我会用一小撮盐来记录这些警告。它不应该像(除了你的代码中的错误)一样,它对我来说看起来很合适。

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

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

答案 1 :(得分:0)

确保您不使用zombies on(NSZombiesEnabled参数或Scheme Diagnostics)测试内存使用情况。默认情况下,僵尸永远不会被删除。