Cocoa touch 使用dismissModalViewControllerAnimated-won';我不能释放任何内存

Cocoa touch 使用dismissModalViewControllerAnimated-won';我不能释放任何内存,cocoa-touch,memory-management,model-view-controller,Cocoa Touch,Memory Management,Model View Controller,我有一个非常简单的代码来显示模态控制器(nextController是类成员): 然后当控制器应该隐藏时: [self dismissModalViewControllerAnimated:YES]; nextController = nil; 所有这些都按预期运行良好,但当我运行instrument Object Allocations时,它显示在解除模态控制器之后,它分配的内存没有被释放。这会成为一个问题,因为当我显示多个控制器时,内存已用完 有人能给我一些线索吗?Clang没有发现任何问

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

然后当控制器应该隐藏时:

[self dismissModalViewControllerAnimated:YES];
nextController = nil;
所有这些都按预期运行良好,但当我运行instrument Object Allocations时,它显示在解除模态控制器之后,它分配的内存没有被释放。这会成为一个问题,因为当我显示多个控制器时,内存已用完

有人能给我一些线索吗?Clang没有发现任何问题,所以我一直在达到内存限制,因为被解雇的控制器的内存不会被释放



编辑:到目前为止,我发现这似乎是苹果产品中的一个漏洞。复制方法:XCode->使用模板“实用程序应用程序”创建新项目。不要自己编写任何代码。只需创建一个新的实用程序应用程序并使用“对象分配”运行它,选择查看“已创建&仍然存在”。现在翻转模态控制器几次-您将看到分配的内存只会在模态控制器每次出现和消失时不断增长

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

我认为,如果使用synthesis为使用
retain
定义的
nextController
属性创建访问器,那么访问器将保留分配给该属性的任何对象。简单地将值设置为
nil
不会释放对象,除非访问器设置为这样做,我认为自动生成的不会这样做

在设置为nil之前,您必须明确地调用
release


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

据我所知,您显示的代码中没有泄漏。
指令屏幕
中可能存在泄漏,这将阻止解除分配

我认为运行静态分析仪来查看是否发现泄漏是值得的

苹果模板代码中的漏洞很有趣。可能是有漏洞。这似乎不太可能,但显然不是不可能。我想说的是,这更可能是仪器中的假阳性,这就是我建议使用静态分析仪的原因


(您可能想提出有关泄漏的错误报告。)

正如我所说,nextController是一个成员,而不是一个属性:@interface MainScreenViewController:UIViewController{id nextController;}使用“release”而不是将nextController指定为“nil”会导致异常:消息ViewDidEnglish:发送到已释放的对象。对象似乎已被释放,但“已创建且仍处于活动状态”对象分配工具仅显示内存使用量不断增长。
[self dismissModalViewControllerAnimated:YES];
nextController = nil;