UINavigation setViewControllers:内存分配
Posted
技术标签:
【中文标题】UINavigation setViewControllers:内存分配【英文标题】:UINavigation setViewControllers: memory allocation 【发布时间】:2012-09-06 13:18:23 【问题描述】:我在导航控制器上使用 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数量增加,而且类变量也没有释放,因此内存堆积。结果是我的应用程序的性能在很大程度上降低了。
请就此提出建议。
【问题讨论】:
【参考方案1】:首先,仪器在查看内存分配时通常会提供误报,因此我会对这些警告持保留态度。它不应该安装,因为(除了您的代码的错误之外)它看起来对我来说相当有效。
其次,您的代码不正确,因为 myNavController
(我假设是 UINavigationController
)在调用 setViewControllers
时会崩溃,因为它需要 UIViewController
的数组,而不是像您那样的单个视图控制器多于。这很可能会崩溃,甚至无法编译。
检查您的代码是否有效并再次运行仪器。如果您仍然有同样的问题,它可能只是误报,应该被忽略。
【讨论】:
感谢您的快速回复。myNavController
是 UINavigationController
和 setViewControllers
仅包含单个视图控制器。【参考方案2】:
确保您没有在(NSZombiesEnabled 参数或在方案诊断中)使用僵尸时测试内存使用情况。默认情况下,僵尸永远不会被删除。
【讨论】:
以上是关于UINavigation setViewControllers:内存分配的主要内容,如果未能解决你的问题,请参考以下文章
关闭 UIAlertController 时调用 UINavigation 的 dismissViewControllerAnimated 方法
iOS关于UITabView和UIAlertController,UIAlertAction以及UINavigation,值修改的传递页面推送