我继承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'作为他们的类。)
答案 0 :(得分:1)
如果您以循环方式创建了故事板,则可能会始终创建新的viewControllers
。每个segue转换都会创建新的viewController
,因此可能没有内存泄漏,但会占用您的内存。
您应该使用UITabBarController
或UINavigationController
来回移动,永远不会创建循环。
此外,在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];
}