我创建了一个iPhone应用程序,您可以在NavController中启动,在几个级别之后,您可以从表中选择一个选项,并且弹出一个动画视图,其根部有一个tabbarcontroller。
这是一个完全独立的视图,取代了navcontroller。您可以选择四处,当您想要返回选项屏幕时,您可以按回来,另一个动画过渡将交换导航控制器,移除标签栏控制器并释放它。
问题在于发布UITabBarController。如果按Tab键在标签之间切换,则表示您不断增加视图控制器的引用计数。然后,当您在tabBarController引用上调用release时,它将仅释放所选选项卡的视图控制器或您尚未查看的任何选项卡,并且它会在其他选项卡视图控制器上执行其中一个保留计数。这意味着您从未选中的每个其他选项卡中泄漏所有Model对象,自定义单元格对象等。
作为我所看到的一个例子,如果你在xcode中创建一个新的模板TabBarController项目,并将viewWillAppear方法添加到第一个视图控制器,它打印出自己的保留计数。启动应用程序并在“第一个”和“第二个”选项卡按钮上来回按,并查看保留计数不断增加的日志。
所以我想知道是否有办法释放标签栏控制器并让它同时释放所有的视图控制器?
答案 0 :(得分:0)
如果这是真的,那就是一个错误,你应该在Apple Radar上提交一份报告。
答案 1 :(得分:0)
为了完整起见,我确实在apple dev论坛上发布了这个问题,寻找一些确认但从未听过任何回复。
在OS3.0上查看我的应用程序显示此行为现已修复。引用计数永远不会增加,释放UITabBarController似乎有效。
可悲的是,我提出了一个讨厌的黑客来解决这个问题,因为它不适合OS 3.0,所以它现在是条件编译时间。