有人发布了一个类似的问题,但没有解决方案,也没有示例代码。所以,我想我应该在这里详细介绍一下我的问题。
我有一个有几种游戏模式的游戏,每种模式都有几个选项。在尝试了各种设计之后,将它们放入一个有三个选项卡的UITabBarController中似乎是最干净的,每个选项卡对应一个游戏类别。我创建了一个新的UIVIewController,它是从主菜单屏幕加载的(替换主屏幕),并按如下方式初始化UITabBarController:
barController = [[UITabBarController alloc] init];
Games1 *vc1 = [[[Games1 alloc] initWithNibName:@"Games1" bundle:nil] autorelease];
Games2 *vc2 = [[[Games2 alloc] initWithNibName:@"Games2" bundle:nil] autorelease];
Games3 *vc3 = [[[Games3 alloc] initWithNibName:@"Games3" bundle:nil] autorelease];
NSArray* controllers = [NSArray arrayWithObjects:vc3, vc1, vc2, nil];
barController.viewControllers = controllers;
[self.view addSubview:barController.view];当用户选择一个游戏时,我从窗口中移除UIViewController并释放,如下所示:
- (void)dealloc {
printf("Games released: barController: %d\n", [barController retainCount]);
[barController.view removeFromSuperview];
barController.viewControllers = 0;
[barController release];
barController = 0;
[super dealloc];
}我遇到的问题是,当我旋转设备时,我会崩溃。如果我直接从主屏幕启动游戏模式并旋转,就不会崩溃。我已经验证了所有东西都被释放了,并且我在bar控制器上的保留计数是1。有什么建议可以消除这个崩溃吗?谢谢!
编辑更多信息:
barController定义为:
IBOutlet UITabBarController *barController;通过以下方式:
@property (nonatomic, retain) IBOutlet UITabBarController *barController;发布于 2010-02-16 12:41:25
最终,问题只是与UITabBarController有些微妙的关联。我直接在我的应用程序窗口中添加和删除UIViewControllers,这已经被证明在其他地方造成了问题。添加一个主UIViewController / UIView并只添加和删除它可以修复所有问题,尽管自动释放而不是释放可能也是有效的。请参阅此处的讨论:
View Controller being sent a message even though it has been deallocated
UITabBarController只是导致问题发生得更快、更明显。
发布于 2010-02-12 14:44:13
不要这样做:
barController.viewControllers = 0;在-dealloc中,您只需将UITabBarController的视图从其superview中移除并释放它即可。
https://stackoverflow.com/questions/2250076
复制相似问题