当我使用addChildViewController时没有调用dealloc

时间:2013-08-16 09:54:10

标签: iphone ios5 memory-management uiviewcontroller dealloc

我使用下面的代码将视图添加为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 MenuVC我在其中添加了多个ViewControllers childview。我将MenuVC称为pushViewController所以当我在MenuVC时,我可以看到VideoListVC作为子视图。当我调用popViewControllerAnimated那个时间dealloc方法没有调用MenuVC以及VideoListVC时。所以问题是ViewController内存不释放,应用程序内存不断增加。最后,当我连续使用app 20 to 25 min时,应用程序崩溃。

解决这个问题的方法是什么?我曾尝试removeFromParentViewController但没有取得任何成功。

我的代码addChildViewController ??

有什么问题

1 个答案:

答案 0 :(得分:2)

1)你的第二行应该是

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

2)如果你不使用ARC,你应该在最后发布你的VideoListVC和navController,因为由于initWithRootViewController调用而保留了videoListVC,并且由于addChildViewController而保留了navController。

3)我不知道这是否重要,但Apple View Controller Programming Guide for iOS的清单14-1在添加childVC时显示了另一个序列:

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

希望这有帮助。