当我触发模拟记忆警告时,我看到一些意外的行为,我希望有人可以解释。
我的应用程序包含一个UITabBarController和一个UINavigationController。我的所有UI都是以编程方式创建的,没有任何内容从NIB加载。在我的委托函数applicationDidFinishLaunching中,我创建了选项卡控制器,导航控制器和五个视图控制器。当我触发内存警告时,主视图变为白色,导航保持在顶部,标签保持在底部。当我更改选项卡时,新选项卡会在正确调用loadView时正确地重新加载数据,但导航控制器会消失。
这让我感到困惑有两个原因。 1)为什么卸载主视图?我认为不会在活动视图控制器上调用viewDidUnload。 2)为什么我的导航控制器会消失,但只有在更改标签后才会消失。这是一个真正的谜。
感谢。
答案 0 :(得分:1)
这听起来像是一个记忆问题。您可能需要retain
为UITabBarController和UINavigationController创建的对象。
在unload-method中,您需要释放它们。
Apple提供了一本优秀的手册,解释了目标C中的内存管理:"Memory Management Programming Guide“。非常明确且有帮助。
答案 1 :(得分:1)
问题归结为我如何使用UIViewControllers,UIViews和UINavigationController。我有5个视图控制器,每个视图控制器在~3个视图之间动态交换。这有点奇怪,它是我的第一个iOS项目,并不理解“Apple Way”。
最后,我简单地从我的应用程序中删除了UINavigationController的所有概念并编写了我自己的。我不使用从一个视图到下一个视图的动画,所以这非常简单易行。
经验教训。