Как использовать Xcode для обнаружения двойного высвобождения объекта? - PullRequest
0 голосов
/ 04 августа 2011

У меня есть объект MFMailComposeViewController, который я высвобождаю в обратном вызове моей кнопки электронной почты, просто потому, что я его создал, и я думаю, что мои действия периодически, но не всегда приводят к сбою моего приложения.

Как можноЯ использую инструментальную программу Xcode, чтобы обнаружить такую ​​ситуацию?

Спасибо.

1 Ответ

0 голосов
/ 04 августа 2011

Можно установить для переменной среды 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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...