У меня есть пользовательский контейнер UIViewController, который имеет шесть дочерних UIViewControllers и набор вкладок, с которыми пользователь взаимодействует, чтобы переключаться между контроллерами дочерних представлений. Проблема в том, что когда мой диспетчер просмотра контейнера выпущен, контроллеры дочерних представлений не являются.
Я проверил, что контроллеры дочерних представлений не освобождаются, добавляя некоторый код отладки к их методам dealloc, и они освобождаются, пока их представление не добавляется в представление контроллера контейнера.
Ниже приведен фрагмент кода, который я использую для создания моего настраиваемого контроллера представления контейнеров. Указатели viewController - iVars. Я также использую ARC, поэтому нет фактических вызовов выпуска.
- (void)init
{
if ((self = [super init])) {
vc1 = [[UIViewController alloc] init];
[self addChildViewController:vc1];
vc2 = [[UIViewController alloc] init];
[self addChildViewController:vc2];
vc3 = [[UIViewController alloc] init];
[self addChildViewController:vc3];
vc4 = [[UIViewController alloc] init];
[self addChildViewController:vc4];
vc5 = [[UIViewController alloc] init];
[self addChildViewController:vc5];
vc6 = [[UIViewController alloc] init];
[self addChildViewController:vc6];
}
return self;
}
- (void)dealloc
{
[vc1 removeFromParentViewController];
vc1 = nil;
[vc2 removeFromParentViewController];
vc2 = nil;
[vc3 removeFromParentViewController];
vc3 = nil;
[vc4 removeFromParentViewController];
vc4 = nil;
[vc5 removeFromParentViewController];
vc5 = nil;
[vc6 removeFromParentViewController];
vc6 = nil;
}
- (void)switchFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController
{
if (fromViewController) {
[fromViewController.view removeFromSuperview];
}
[self.view addSubview:toViewController];
toViewController.view.frame = self.view.bounds;
}
У вас есть идеи, что я делаю неправильно?