Приложение для iPhone - отказ от контроллера модального вида не освобождает его - PullRequest
6 голосов
/ 11 июля 2011

У меня есть UIViewController (назовите его NumberTwo), который я представил как модальный контроллер представления от другого UIViewController (назовите его NumberOne).NumberTwo содержит метод touchesBegan, который прослушивает прикосновения, а также метод акселерометра, который прослушивает изменения ориентации устройства в направлении x, y или z.У NumberTwo есть кнопка «Готово», которая при нажатии на нее перестает быть модальным контроллером вида:

[self dismissModalViewControllerAnimated:NO];

Но кажется, что он все еще слушает прикосновения и все еще слушает ускорения.Как я могу полностью освободить NumberTwo, когда уволю?Я попытался добавить вызов выпуска следующим образом:

[self dismissModalViewControllerAnimated:NO];
[self release];

, но это вызвало EXEC_BAD_ACCESS.

Ответы [ 3 ]

3 голосов
/ 11 июля 2011

Вы выпустили контроллер после того, как представили его?Например, в вашем методе в NumberOneController, который представляет его, у вас есть что-то вроде:

NumberTwoController * controller = [NumberTwoController alloc] init];
// do stuff to config controller
[self presentModalViewController: controller];
[controller release];

Если вы не хотите висеть на NumberTwoController для повторного использования, это будет обычный шаблон.Метод presentModalViewController обеспечивает сохранение контроллера во время его использования.Затем он должен привести в порядок, когда в NumberTwoController вы позвоните [self dismissModalViewControllerAnimated: NO].

3 голосов
/ 19 марта 2012

У меня была очень похожая проблема, которая мучила меня в течение многих дней. Оказалось, что мой класс контроллера представления не был освобожден, когда я отклонил его, потому что у этого контроллера представления был активный NSTimer, который не был аннулирован (остановлен). Мне удалось убить таймер в viewDidDisappear.

1 голос
/ 11 июля 2011

Убедитесь, что вы отпускаете все, что используете, когда заканчиваете с ним; Метод dealloc вызывается только тогда, когда UIViewController и все его свойства / объекты больше не используются. Никогда не используйте [self release];, вам нужно освободить его от контроллера представления, который его создал, после того, как вы закончили с ним.

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