2010-02-21 79 views
0

我正在使用一个非常标准的配方在我的iPhone应用程序中呈现ModalViewControllers,但是我遇到了配方被打破并且很困惑的情况。这是我(几乎总是)如何设置演示:EXEC_BAD_ACCESS当关闭ModalViewController

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

+0

你在做什么-setPrimary:andSecondary:? – 2010-02-21 14:50:47

+0

将参数(NSInteger)传递给成员变量。 – Devunwired 2010-02-21 15:58:28

回答

0

我要去猜测,primaryIndexsecondaryIndex 不当保留的对象 使得它们依赖于留住他们生存的模式视图。当你释放模态视图时,它们会死亡,但会在代码中的其他地方调用,导致崩溃。

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

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

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

+0

好吧,抓我的想法。我在父母的第二个评论之前写了它,显然他们不是对象。然而,基本想法是健全的。当它在最终发布时死亡时,视图正在采取一些措施。 – TechZen 2010-02-21 16:20:13

+0

感谢您指点我在正确的方向乡亲。事实证明,确切的罪魁祸首是一些在施工时没有保留的物体释放(NARC违规,因为我相信他们被称为)。 – Devunwired 2010-02-21 18:41:03

0

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

+0

谢谢你指出我在正确的方向乡亲。事实证明,确切的罪魁祸首是一些在施工时没有保留的物体释放(NARC违规,因为我相信他们被称为)。 – Devunwired 2010-02-21 18:40:24