Проблема с методом dealloc, не вызываемым в UIViewController - PullRequest
0 голосов
/ 28 февраля 2011

У меня проблема с тем, что метод dealloc для моего пользовательского UIViewController (MyVC) не вызывается, когда он выталкивается. Прочитайте пару других ответов по SO, и, возможно, один из виновников может заключаться в том, что я до сих пор храню ссылку на MyVC, поэтому не вызывается dealloc.

Obj *objA = [[Obj alloc] initWithValue:value];

MyVC *newVC = [[MyVC alloc] init];
newVC.somIvar = objA;

[self.navigationController pushViewController:newVC animated:YES];

[newVC release];
[objA release];

Что меня все еще смущает, так это означает, что контроллер корневого представления (RootVC), который выдвигает MyVC, все еще имеет ссылку на него, или что что-то внутри самого MyVC не освобождается, что кажется странным, поскольку его метод dealloc не вызывается так У него есть ссылки на все его объекты?

Насколько я понимаю, порядок событий от нажатия до появления MyVC:

  1. создать и отправить MyVC из RootVC, как описано выше
  2. при нажатии кнопки «Назад» на панели навигации popViewControllerAnimated: вызывается в навигационном контроллере, и MyVC выталкивается
  3. если больше нет ссылок на MyVC, то navigationController вызывает его метод dealloc?

Не уверен насчет номера 3? Я не обнаружил каких-либо утечек при использовании инструментов, и кажется, что это не может быть что-то внутри MyVC, потому что его метод dealloc даже не вызывается, так как он все равно его почистит?

1 Ответ

0 голосов
/ 28 февраля 2011

Поскольку вы используете точечную нотацию, чтобы назначить ваш виртуальный канал iVar другого объекта, он сохраняется (при условии, что вы объявили сохранение в объявлении свойства) этим объектом.

Если вы не освободите iVar (и, следовательно, vC) в методе dealloc объекта 'c class', он не будет освобожден, даже если объект появится.Итак, добавьте [somIvar release] к объекту метода dealloc, и все должно быть хорошо ...

Кстати, вы можете выпустить vC сразу после назначения его iVar, так как он будет сохраняться объектом до тех пор, покавыпустила себя.

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