【发布时间】:2011-08-04 00:34:19
【问题描述】:
我在电子邮件按钮的回调中释放了一个 MFMailComposeViewController 对象,这仅仅是因为我创建了它,我认为我这样做是间歇性的,但并不总是使我的应用程序崩溃。
如何使用 Xcode 的检测程序来检测这种情况?
谢谢。
【问题讨论】:
标签: xcode release mfmailcomposeviewcontroller
我在电子邮件按钮的回调中释放了一个 MFMailComposeViewController 对象,这仅仅是因为我创建了它,我认为我这样做是间歇性的,但并不总是使我的应用程序崩溃。
如何使用 Xcode 的检测程序来检测这种情况?
谢谢。
【问题讨论】:
标签: xcode release mfmailcomposeviewcontroller
可以将NSZombieEnabled环境变量设置为YES(Product > Edit Scheme...,选择Run(Product Name),点击参数 选项卡并编辑环境变量列表)。使用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];
}
【讨论】: