如何使用Xcode检测对象的双重释放?

时间:2011-08-04 00:34:20

标签: xcode release mfmailcomposeviewcontroller

我有一个MFMailComposeViewController对象,我在我的电子邮件按钮的回调中发布,只是因为我创建它,我认为我这样做是间歇性的,但并不总是崩溃我的应用程序。

如何使用Xcode的仪器程序来检测这种情况?

感谢。

1 个答案:

答案 0 :(得分:0)

您可以将NSZombieEnabled环境变量设置为YES产品>编辑方案... ,选择运行(产品名称),单击 Arguments 选项卡并编辑环境变量列表。使用NSZombie时,对象不会被释放,而是变成僵尸。对它们进行消息传递会将错误记录到控制台,而不是使用EXC_BAD_ACCESS崩溃。这样你就可以发现它是否真的导致了MFMailComposeViewController

但是保留和释放视图控制器甚至可能不是必需的。如果您在创建MFMailComposeViewController之后立即展示它,并且在它被解除后不再使用它,则无需保留它:

- (IBAction)composeMessage:(id)sender {
    MFMailComposeViewController *mailComposeViewController = [[[MFMailComposeViewController alloc] init] autorelease];
    mailComposeViewController.mailComposeDelegate = self;
    [self presentModalViewController:mailComposeViewController animated:YES];
}

- (void)mailComposeController:(MFMailComposeViewController *)mailComposeViewController didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
    // Present error to the user if failed
    [self dismissModalViewControllerAnimated:YES];
}