EXEC_BAD_ACCESS при Увольнении ModalViewController - PullRequest
0 голосов
/ 21 февраля 2010

Я использую довольно стандартный рецепт для представления ModalViewControllers в своих приложениях для iPhone, но я столкнулся с ситуацией, когда рецепт нарушен, и я запутался. Вот как я (почти всегда) настраивал презентацию:

MatcherViewController *controller = [[MatcherViewController alloc] initWithNibName:@"MatcherView" bundle:nil];
[controller setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[controller setDelegate:self];
[self presentModalViewController:controller animated:YES];
[controller release];

Это всегда прекрасно работает, пока я не добавил одну вещь в микс и не отправил сообщение новому объекту контроллера, прежде чем представить его, например:

MatcherViewController *controller = [[MatcherViewController alloc] initWithNibName:@"MatcherView" bundle:nil];

[controller setPrimary:primaryIndex andSecondary:secondaryIndex];

[controller setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[controller setDelegate:self];
[self presentModalViewController:controller animated:YES];
[controller release];

Добавление этого вызова метода работает до тех пор, пока я не отклоню контроллер представления ... в этот момент приложение завершает работу с сигналом EXEC_BAD_ACCESS. Я могу заставить его работать с дополнительной строкой, если удаляю [controller release], но тогда я боюсь, что это приведет к утечке. Любые идеи, почему отправка сообщения объекту до презентации может вызвать это? Есть ли лучший способ передать простые параметры в ModalViewController?

Спасибо, что уделили время новичку; p

Ответы [ 2 ]

0 голосов
/ 21 февраля 2010

Я собираюсь предположить, что primaryIndex и secondaryIndex являются неправильно сохраненными объектами , так что они зависят от модального вида, сохраняющего их для выживания.Когда вы освобождаете модальное представление, они умирают, но затем вызываются в другом месте кода, вызывая сбой.

Если они являются сохраняемыми свойствами класса, всегда обращайтесь к ним с помощью конструкции «self.propertyName», чтобы убедиться, что их счетчики сохраняются правильно.

По моему опыту, преждевременная оптимизация в форме чрезмерного выпуска является основной причиной головных болей Objective-C сегодня.Старые программисты Objective-C старой школы были параноиками по поводу утечек, потому что их было почти невозможно отследить вручную в тот же день.Вот почему многие ресурсы по-прежнему уделяют большое внимание предотвращению утечек.Однако с современными инструментами анализа, утечки, как правило, тривиально отследить.

Во время первоначальной разработки, если есть сомнения, не выпускайте.

0 голосов
/ 21 февраля 2010

В вашем методе dealloc для контроллеров убедитесь, что вы ничего не выпустите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...