2

以下のコードを使用してビューを追加していaddChildViewControllerます。

VideoListVC * videoListVC = [[VideoListVC alloc] initWithNibName:@"VideoListVC" bundle:nil];
UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController:videoListVC];
navController.view.frame = self.view_Container.bounds;
videoListVC.view.frame = navController.view.bounds;

[self addChildViewController:navController];
[navController didMoveToParentViewController:self]
[self.view_Container  addSubview:navController.view];

self is MenuVCViewControllersとして複数を追加しchildviewます。私は私がMenuVCいるpushViewControllerとき、私は子ビューとしてMenuVC見ることができます。その時間メソッドをVideoListVC呼び出したとき、のと同様に 呼び出されませんでした。したがって、問題はメモリが解放されず、これによりアプリのメモリが継続的に増加することです。そして最後に、アプリを継続的に動かすとアプリがクラッシュします。popViewControllerAnimateddeallocMenuVCVideoListVCViewController20 to 25 min

これを解決する方法は何ですか?? 私は試してみremoveFromParentViewControllerましたが、成功しませんでした。

私のコードに何か問題があります addChildViewControllerか??

4

1 に答える 1

2

1)2行目は

UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController:videoListVC];

2) ARC を使用しない場合は、VideoListVC と navController を最後に解放する必要があります。これは、initWithRootViewController 呼び出しによって videoListVC が保持され、addChildViewController によって navController が保持されるためです。

3) これが重要かどうかはわかりませんが、Apple のiOS 用ビュー コントローラー プログラミング ガイドのリスト 14-1 は、childVC を追加するときの別のシーケンスを示しています。

 [self addChildViewController:content];                 // 1
 content.view.frame = [self frameForContentController]; // 2
 [self.view addSubview:self.currentClientView];
 [content didMoveToParentViewController:self];          // 3

お役に立てれば。

于 2013-08-16T10:30:45.687 に答える