Я работаю над приложением, у которого есть главное представление, которое хочет порождать дочернее представление при нажатии кнопки.Поэтому, когда я получаю событие кнопки, MainViewController порождает дочернее представление, вызывая initWithNibName и сохраняя ChildViewController в ivar.Затем я показываю ChildView, прикрепляя анимацию и устанавливая childVC.view.hidden = NO.
. Это работает, но я заметил, что ChildViewController никогда не выпускался после закрытия ChildView.Я понял, что счетчик сохранения ChildVC изменился с 1 до 2, когда я впервые получаю доступ к дочернему виду.Таким образом, что-то в кишках загрузки пера снова сохраняет мой ChildVC (в дополнение к первоначальному сохранению, которое я ожидаю во время инициализации объекта).
Может кто-нибудь помочь мне выяснить, почему ChildVC получает дополнительное времяи как я могу убедиться, что он полностью освобождается, когда я хочу закрыть дочернее представление?
Редактировать: вот некоторый код, только слегка упрощенный.Это методы родительского контроллера представления.
-(IBAction)onLaunchChildButtonTouched:(id)sender
{
m_childViewController = [[ChildViewController alloc] initWithNibName:@"ChildViewController" bundle:nil];
[m_childViewController setParentDelegate:self]; // this is a weak reference
// m_childViewController retain count here is 1, as expected
m_childViewController.view.hidden = YES;
// m_childViewController retain count is now 2, not expected
[self.view addSubview:m_childViewController.view];
[self addTransitionEntrDir:YES]; // code omitted
m_childViewController.view.hidden = NO;
}
-(void)onChildWantsToClose:(id)child
{
NSAssert( child == m_childViewController, @"unexpected childVC" );
// if child view is now hidden, we should remove it.
if( m_childViewController != nil && m_childViewController.view.hidden )
{
[m_childViewController.view removeFromSuperview];
[m_childViewController release]; m_childViewController = nil;
// BUG: m_childViewController retain count is still 1 here, so it never gets released
}
}