子类化UIViewController导致内存问题?

时间:2012-10-24 15:40:32

标签: iphone ios xcode

继承UIViewController 以防止代码重复我的'masterButtons'和'subButtons'组。

这一切看起来都很漂亮,直到我意识到在大约1200页更改后 - 仅在3个空白页面之间导航(只显示按钮和其他几个对象)应用程序将总是崩溃!

仪器(+在设备上进行测试)没有显示任何内存泄漏,但确实显示了这些按钮对象的数百个实例!(选择了“创建和静止”过滤器。) 此外,从任何ViewControllers都不会调用viewDidUnload / didReceiveMemoryWarning!

我的app中的其他页面上没有遇到过这些问题(其中UIViewController没有子类化)。

因此看起来正在重新创建ViewController的内容,并且之前创建的任何内容都不会被删除。 UIViewController的子类化是否有任何常见的陷阱可能会导致这种情况?有什么我可能会遗漏的吗?

建议将不胜感激。 (我想把这个问题扔掉窗外我的mac!

Top_ViewController      (contains 'MasterButtons')
       v
Area1_ViewController    (subclass of TOP_ViewController) (contains 'subButtons', and  a few texts fields etc.)
       v
aPage_ViewController    (subclass of Area1_ViewController)  (currently blank page)

(使用ARC和故事板。故事板视图控制器有一个相应的'aPage_ViewController'作为他们的类。)

1 个答案:

答案 0 :(得分:1)

如果您以循环方式创建了故事板,则可能会始终创建新的viewControllers。每个segue转换都会创建新的viewController,因此可能没有内存泄漏,但会占用您的内存。

您应该使用UITabBarControllerUINavigationController来回移动,永远不会创建循环。

此外,在iOS6中不推荐使用viewDidUnload,也许您忽略了警告?

修改

尝试这样的事情:

-(void)tab1_IsPressed:(UIButton *)paramSender{
    Top_ViewController *target_VC = (Top_ViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"page_1"];
    [self.navigationController popViewControllerAnimated:NO];
    [self.navigationController pushViewController:target_VC animated:NO];
}
-(void)tab2_IsPressed:(UIButton *)paramSender{
    Top_ViewController *target_VC = (Top_ViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"page_2"];
    [self.navigationController popViewControllerAnimated:NO];
    [self.navigationController pushViewController:target_VC animated:NO];
}