0

我正在继承UIViewController以防止我的“masterButtons”和“subButtons”集的代码重复。

这一切似乎都运行得很好,直到我意识到在大约 1200 次页面更改之后- 仅在 3 个空白页面之间导航(仅显示按钮和一些其他对象),应用程序总是会崩溃!

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

我在我的应用程序的其他页面上没有遇到这些问题(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”作为它们的类。)

4

1 回答 1

1

如果您以循环方式创建故事板,则可能会viewControllers一直创建新故事板。每个 segue 转换都在创建新的viewController,因此可能没有内存泄漏,但您的内存将被消耗。

您应该使用UITabBarControllerUINavigationController来回移动并且永远不要创建循环。

此外viewDidUnload在iOS6中已弃用,也许您忽略了警告?

编辑:

尝试这样的事情:

-(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];
}
于 2012-10-24T15:52:40.040 回答