问题描述
|
我得到了奇怪的导航栏行为,例如,当我单击“后退”按钮时,显示的屏幕是前一个屏幕,但是导航栏项目确实发生了变化。因此,我剩下的是屏幕A,但屏幕B带有导航栏按钮。
这可能是由于内存泄漏引起的吗?我确实在我的应用中注意到:
这种现象似乎发生了:
如果我触发记忆立即
通过模拟器菜单发出警告,或
开机后在设备上
一段时间[没有被杀死
然后作为应用重新启动]。
我确实有一些内存泄漏
尝试清理(即Profiler
突出显示“泄漏的块”中的项目
部分)
关于故障查找根本原因的任何提示,为什么按下“后退”按钮将最终变成怪异状态?例如屏幕在上一个父视图上显示,但导航栏项保持不变...
更新-我终于消除了应用程序中的内存泄漏,但是我注意到导航栏问题仍然存在。我想这并不能确认我的问题的答案是否定的,但是在我的具体情况下,这不是备忘录泄漏...
解决方法
从苹果公司:
导航控制器更新
每次顶视图时导航栏
控制器更改。因此,这些
每次查看都会发生更改
控制器被推入堆栈或
从中弹出。当动画一个
推送或弹出操作,导航
控制器类似地动画
更改导航栏内容。
基于此,我将从在视图定义中查找错误或配置错误开始。如果通过NIB定义了视图,请检查是否有InterfaceBuilder警告。确保两个UIViewControllers中的视图层次结构均正确。还要检查视图生命周期方法中可能存在的错误:bug0ѭ,
viewWillDisappear:
等。
实际上,如果您可以发布一些屏幕截图和/或代码,那就太好了。谢谢!
, 当发生内存警告时,将释放所有当前不可见且仅由其视图控制器保留的视图(作为该视图控制器的view属性的一部分)(连同所有未保留的子视图)。
您可能会将视图创建为init的一部分,而不是将其保留在控制器中(只需让视图套接字阻止其释放)。解决此问题的一种方法是为创建的视图创建属性(非原子视图,保留视图),并在创建它们并自动释放之后将其分配给这些属性,不要忘记将这些属性分配给nil作为dealloc的一部分以避免泄漏。另一种方法是在viewDidLoad中创建与init相反的自定义视图元素。
没有令人讨厌的观点中没有代码示例的话很难说:)
, 在调用calling2后,我已经看到类似的情况。除了调用beyond3以外,您可能不尝试对导航控制器的视图控制器进行任何编程操作。