我有一个非常简单的代码来显示一个模态控制器(nextController是一个类成员):
nextController = [[InstructionsScreen alloc] initWithNibName:@"InstructionsScreen" bundle:nil];
[self presentModalViewController:nextController animated:YES];
[nextController release];
然后当控制器隐藏时:
[self dismissModalViewControllerAnimated:YES];
nextController = nil;
所有工作都按预期工作,但是当我运行仪器对象分配时,它显示在解除模态控制器后,它所分配的内存不会被释放。这成为一个问题,因为当我显示几个控制器时,内存已经结束......
有人可以给我一些线索吗? Clang没有看到任何问题,所以我卡住了内存限制,因为被解雇的控制器的内存不会被释放。
答案 0 :(得分:1)
据我所见,您显示的代码中没有泄漏。 可能是InstructionsScreen
中的泄漏,会阻止它被解除分配。
我认为值得运行静态分析器以查看是否发现泄漏。
Apple模板代码中的泄漏很有趣。可能是有泄漏。这似乎不太可能,但显然这并非不可能。我会说,它更可能是仪器中的假阳性,这就是为什么我建议使用静态分析仪。
(您可能想要提出有关泄漏的错误报告。)
答案 1 :(得分:0)
模态视图不是调用视图的子视图,而是应用程序窗口的子视图,并由窗口本身保留。通常,您不会在调用它们的控制器中保留对它们的引用。相反,唤起模态视图,然后通过将控制器定义为模态视图的委托来使其与控制器通信。
我认为如果使用synthesize为nextController
定义的retain
属性创建访问器,则访问者将保留分配给该属性的任何对象。简单地将值设置为nil
将不会释放对象,除非访问器设置为执行此操作而我不认为自动生成的对象。
在设置为nil之前,您必须先致电release
。
如果这不起作用,请发布您的nextController
属性定义的代码。