私は自分の電子メールボタンのコールバックでリリースしているMFMailComposeViewControllerオブジェクトを持っています。私はそれを作成しているだけなので、断続的ですが、常にアプリケーションをクラッシュさせるとは限りません。Xcodeを使ってオブジェクトのダブルリリースを検出するには?
このような状況を検出するためにXcodeの計測プログラムを使用するにはどうすればよいですか?
ありがとうございました。
私は自分の電子メールボタンのコールバックでリリースしているMFMailComposeViewControllerオブジェクトを持っています。私はそれを作成しているだけなので、断続的ですが、常にアプリケーションをクラッシュさせるとは限りません。Xcodeを使ってオブジェクトのダブルリリースを検出するには?
このような状況を検出するためにXcodeの計測プログラムを使用するにはどうすればよいですか?
ありがとうございました。
あなたは(製品>編集スキーム...、選択ラン(製品名)、引数]タブをクリックして、環境変数のリストを編集)YES
にNSZombieEnabled
環境変数を設定することができます。 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];
}