Задача c - Правильный способ выпустить UIVIewController - PullRequest
1 голос
/ 12 сентября 2011

У меня проблемы с выпуском контроллера UIView, это мой код. Когда я нажимаю кнопку, я помещаю вид на экран перед всем:

   viewT = [[PersonalViewController alloc] initWithNibName:@"PersonalViewController" bundle:[NSBundle mainBundle]];
//In this moment the retainCount is 1
[[AppDelegate appDelegate].window  insertSubview:viewT.view aboveSubview:[AppDelegate appDelegate].dockController.view];
[viewT release];
//Now the retain count is 3!

//... After some code, when the user press another button, I want to release the view
 [viewT.view removeFromSuperview];
//After this line, the object stills there, with a retain of 2.

Так что-то происходит, и я не понимаю. Я читал руководства по памяти и никогда раньше не сомневался, что я делаю не так? Как я могу полностью выпустить viewT ???

Ответы [ 2 ]

4 голосов
/ 12 сентября 2011
  • У вас есть любой объект, который вы создаете, когда

Вы создаете объект, используя метод, имя которого начинается с «alloc», «New», «copy» или «mutableCopy» (например, alloc, newObject или mutableCopy).

  • Когда он вам больше не нужен, вы должны отказаться от права собственности на принадлежащий вам объект

Вы отказываетесь от права собственности на объект, отправляя ему сообщение о выпуске или сообщение об автозапуске. В терминологии какао, отказ от собственность на объект, поэтому обычно упоминается как «Освобождение» объекта.

  • Вы не должны отказываться от владения объектом, которым вы не владеете

Это всего лишь следствие предыдущих правил политики, заявленных явно.

Руководство по программированию управления памятью

Итак, вам нужна только одна строка кода

[viewT release];
1 голос
/ 15 ноября 2011

У вас, вероятно, есть цикл сохранения.Есть ли у каких-либо объектов в вашем кончике розетка, связанная с владельцем файла?Это розетка объявлена ​​retain?(Или strong, если вы используете ARC, а это не так.) Измените выход на assign (или weak, если используете ARC).

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