У меня проблема с тем, что метод 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:
- создать и отправить MyVC из RootVC, как описано выше
- при нажатии кнопки «Назад» на панели навигации popViewControllerAnimated: вызывается в навигационном контроллере, и MyVC выталкивается
- если больше нет ссылок на MyVC, то navigationController вызывает его метод dealloc?
Не уверен насчет номера 3? Я не обнаружил каких-либо утечек при использовании инструментов, и кажется, что это не может быть что-то внутри MyVC, потому что его метод dealloc даже не вызывается, так как он все равно его почистит?