解散ModalViewController时EXEC_BAD_ACCESS

时间:2010-02-21 14:24:56

标签: iphone model-view-controller

我正在使用一个非常标准的配方在我的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

2 个答案:

答案 0 :(得分:0)

在你的控制器dealloc方法中,确保你没有过度释放任何东西。

答案 1 :(得分:0)

我要猜测primaryIndexsecondaryIndex不正确保留的对象,这样他们依赖于模态视图来保留它们才能生存。当您释放模态视图时,它们会死亡,但随后会在代码中的其他位置调用,从而导致崩溃。

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

根据我的经验,过度释放形式的过早优化是目前Objective-C头痛的主要原因。老派Objective-C编码员对泄漏感到偏执,因为他们几乎不可能在当天用手追踪。这就是为什么许多资源仍然非常重视防止泄漏的原因。然而,使用现代分析工具,泄漏通常很容易追踪。

在初始开发期间,如有疑问则不发布。