我有一個自定義容器UIViewController有六個子UIViewControllers和一組用戶交互切換子視圖控制器的選項卡。問題是當我的容器視圖控制器被釋放時,子視圖控制器不是。容器UIViewController不釋放它的子視圖控制器
我已驗證子視圖控制器不會通過向其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;
}
你們都有什麼想法我做錯了嗎?
出於好奇,您會引用控制顯示哪個孩子的選項卡。你是如何實現它的?我問,因爲我看到你有孩子的'frame'被設置爲'self.view.frame',所以我不明白父母的視圖上你會顯示這個標籤控件的位置。 – Rob
這只是我的實際代碼正在做的一個超級快速示例,所以它不是100%的想法。在我的實際應用程序中,有一些標籤沿垂直方向運行,然後在主視圖控制器中有一個視圖將子視圖控制器視圖放入其中,然後將其框架設置爲childViewController.frame = contentContainerView.bounds; –
這很有道理。乍看起來,看着它整個屏幕上的遏制的例子,讓我懷疑是否需要收容。聽起來像你有一個很好的計劃,但。抱歉抱怨你。 ;) – Rob