6 つの子 UIViewControllers を持つカスタム コンテナー UIViewController と、ユーザーが子ビュー コントローラーを切り替えるために操作する一連のタブがあります。問題は、コンテナー ビュー コントローラーが解放されたときに、子ビュー コントローラーが解放されないことです。
子ビュー コントローラーは、dealloc メソッドにデバッグ コードを追加することによって解放されないことを確認しました。ビューがコンテナー ビュー コントローラーのビューに追加されない限り、子ビュー コントローラーは解放されます。
以下は、カスタム コンテナー ビュー コントローラーを作成するために使用しているコードの抜粋です。viewController ポインターは iVar です。私も 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;
}
私が間違っていることについて何か考えがありますか?