使用dismissModalViewControllerAnimated不会释放任何内存

Mar*_*rov 8 model-view-controller cocoa-touch memory-management

我有一个非常简单的代码来显示模态控制器(nextController是一个类成员):

nextController = [[InstructionsScreen alloc] initWithNibName:@"InstructionsScreen" bundle:nil];
[self presentModalViewController:nextController animated:YES];
[nextController release];
Run Code Online (Sandbox Code Playgroud)

然后当控制器隐藏时:

[self dismissModalViewControllerAnimated:YES];
nextController = nil;
Run Code Online (Sandbox Code Playgroud)

所有工作都按预期工作,但是当我运行仪器对象分配时,它表明在解除模态控制器后,它所分配的内存不会被释放.这成为一个问题,因为当我显示几个控制器时,内存已经结束......

任何人都可以给我一些线索吗?Clang没有看到任何问题,所以我遇到了内存限制,因为被解雇的控制器的内存不会被释放.


编辑:到目前为止我发现它似乎是苹果公司的某个地方泄漏.重现方法:XCode - >使用模板"Utility application"创建新项目.不要自己编写任何代码.只需创建一个新的实用程序应用程序并使用"对象分配"运行它,选择查看"创建和静止".现在翻转模态控制器几次 - 你会看到分配的内存只会在模态控制器出现时以及当它消失时才会增长和增长......

Tec*_*Zen 0

模态视图不是调用视图的子视图,而是应用程序窗口的子视图,并由窗口本身保留。通常,您不会在调用它们的控制器中保留对它们的引用。相反,调用模态视图,然后通过将控制器定义为模态视图的委托来使其与控制器通信。

我认为,如果您使用 Synthesize 为使用nextController定义的属性创建访问器retain,则访问器将保留分配给该属性的任何对象。简单地将值设置为nil不会释放对象,除非设置访问器来执行此操作,并且我认为自动生成的访问器不会这样做。

release在设置为零之前,您必须明确调用。

如果这不起作用,请发布您的属性定义的代码nextController