Отпустите и pushViewController - PullRequest
1 голос
/ 18 мая 2010

У меня есть пользовательский контроллер представления, который я помещаю в стек навигации следующим образом:

myViewController *myVC = [[myViewController alloc] init];
[myVC generate:myData];
[self.navigationController pushViewController:myVC animated:YES];

код работает нормально, но при проверке на утечки памяти я получаю предупреждение, что myVC никогда не выпускается.

добавление заявления о выпуске

[myVC release];

в строке 4 компилируется нормально, но вылетает при выполнении. Как мне с этим справиться?

Ответы [ 3 ]

3 голосов
/ 18 мая 2010

Я предполагаю, что это не имеет ничего общего с этим разделом кода. Проблема в том, что раньше, так как вы не выпускали его здесь, он никогда не был освобожден. Теперь, когда он освобождается, когда вы извлекаете контроллер представления из стека навигации, он вызывает метод dealloc для myViewController, и некоторый строковый объект там переизбирается.

Предположительно, в какой-то момент какая-то строковая переменная установлена ​​внутри вашего myViewController без ее сохранения, или она освобождается без установки на ноль, а затем вы снова ее отпускаете.

0 голосов
/ 24 октября 2011

Вы должны использовать

myViewController *myVC = [[myViewController alloc] initWithNibName:nil bundle:nil]

При создании новых контроллеров представления кажется, что использование init вместо initWithNibName с аргументами nil портит pushViewController. Эта проблема заняла у меня несколько часов, поскольку она кажется не связана с рассматриваемой проблемой!

0 голосов
/ 18 мая 2010

Да, вы должны освободить свой контроллер вида.

Сообщение об ошибке, которое вы видите, возникает из-за проблемы с управлением памятью в вашем контроллере представления - может показаться, что вы перевыпустили объект NSString.

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