我正在对我正在处理的应用进行内存分析,并注意到我的应用中的详细视图控制器被放弃了#39; (仍然驻留在内存中,但仍然存在有效引用),直到将新的视图控制器推入导航堆栈。我已经测试了这个设备上和模拟器中并遇到了同样的问题。
我创建了一个示例项目here和一个展示现象here的视频。在详细视图控制器的dealloc
中,我放置了视图控制器被销毁时的日志消息。在将新视图控制器放置到导航堆栈之前,这不会执行。
执行内存配置文件时,视图控制器不会被解除分配,直到调用UISplitViewController
内的私有方法_willShowCollapsedDetailViewController:inTargetController:
:
我有什么遗失的吗?这是一个错误吗?如果没有,我如何确保从导航堆栈弹出时正确释放详细视图控制器?
iOS 8 和 9中存在此问题。
答案 0 :(得分:0)
折叠时,_willShowCollapsedDetailViewController
将通过_setPreservedDetailController
保留细节控制器,以便在separateSecondaryViewControllerFromPrimaryViewController
期间旋转旋转控制器以使其变为横向时可以将其移动到辅助位置。否则,分割视图的右侧将是空的灰色且看起来很悲伤。因此,您遇到的是,当它保留新的时,旧的就被释放并取消分配了。