繁体   English   中英

解除ModalViewController时执行EXEC_BAD_ACCESS

[英]EXEC_BAD_ACCESS when Dismissing ModalViewController

我正在使用一个非常标准的配方在我的iPhone应用程序中展示ModalViewControllers,但是我遇到了一种情况,即配方被破坏了,我很困惑。 这是我(几乎总是)设置演示文稿的方式:

MatcherViewController *controller = [[MatcherViewController alloc] initWithNibName:@"MatcherView" bundle:nil];
[controller setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[controller setDelegate:self];
[self presentModalViewController:controller animated:YES];
[controller release];

直到我将一件事添加到混合中,并且在呈现它之前,我已经向新的控制器对象发送了一条消息,这一直很好,就像这样:

MatcherViewController *controller = [[MatcherViewController alloc] initWithNibName:@"MatcherView" bundle:nil];

[controller setPrimary:primaryIndex andSecondary:secondaryIndex];

[controller setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[controller setDelegate:self];
[self presentModalViewController:controller animated:YES];
[controller release];

在我关闭视图控制器之前,添加此方法调用似乎是可行的...此时,应用程序因EXEC_BAD_ACCESS信号而崩溃。 如果删除[controller release] ,我可以使它与额外的行一起使用,但是恐怕会导致泄漏。 有什么想法为什么要在演示之前向对象发送消息会导致这种情况? 有没有更好的方法将简单参数传递给ModalViewController?

感谢您抽出宝贵时间整理新手; p

在控制器的dealloc方法中,确保您没有释放过多的内容。

我会猜测primaryIndexsecondaryIndex 不正确保留的对象 ,因此它们依赖于保留它们才能生存的模式视图。 当您释放模式视图时,它们会死掉,但随后在代码中的其他地方调用会导致崩溃。

如果它们是该类的保留属性,请始终使用“ self.propertyName”构造访问它们,以确保正确管理其保留计数。

以我的经验,过分释放形式的过早优化是当今Objective-C头痛的主要原因。 老派的Objective-C编码人员对泄漏感到疑虑,因为他们几乎不可能在一天之内手动找到泄漏。 这就是为什么很多资源仍然非常重视防止泄漏的原因。 但是,使用现代分析工具,通常很难发现泄漏。

在最初的开发过程中,如有疑问,请不要发布。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM