0
我有一個MFMailComposeViewController對象,我在我的電子郵件按鈕的回調中發佈,僅僅是因爲我創建了它,而且我認爲我這樣做是間歇性的,但並不總是崩潰我的應用程序。如何使用Xcode檢測對象的雙重釋放?
如何使用Xcode的檢測程序來檢測這種情況?
謝謝。
我有一個MFMailComposeViewController對象,我在我的電子郵件按鈕的回調中發佈,僅僅是因爲我創建了它,而且我認爲我這樣做是間歇性的,但並不總是崩潰我的應用程序。如何使用Xcode檢測對象的雙重釋放?
如何使用Xcode的檢測程序來檢測這種情況?
謝謝。
可以設置NSZombieEnabled
環境變量YES
(產品>修改方案...,選擇運行(產品名稱),點擊參數選項卡,並設置環境變量列表)。使用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];
}