当交互式转换被取消时,呈现的视图控制器永远不会被释放(dealloc永远不会被调用)。当交互式转换成功完成时,一切都是好的,但是当这个转换被取消时,似乎目标视图控制器永远不会被释放。结果是内存丢失,但不是内存泄漏(至少Instruments没有检测到)。我可能做错了什么,但我看不出那是什么。因为我找不到任何其他人有这个问题的证据,所以我假设是我。
我有一个非常小的示例项目来演示这个问题(https://github.com/mparma-isi/InteractiveTransitionIssue.git)。在红色方块中轻触将执行到第二个视图控制器的转换。在第二个控制器中轻敲一下,该控制器将返回到第一个控制器。在第一个视图控制器的红色方块内的收缩手势开始使用UIPercentDrivenInteractiveTransition进行交互式转换。如果取消过渡(收缩的负速度),则不会释放所显示的视图控制器。如果您完成了转换,则所有操作都将按预期进行。
提前感谢您的帮助。
麦克
发布于 2014-04-10 05:31:25
所以我用Leaks对其进行了分析,发现了一些有趣的东西:

内存泄漏似乎来自突出显示的行。任何地方都没有成对的-[UIWindow _remoteRotationViewController:]调用(不管它是什么),所以窗口使我们呈现的视图控制器保持活动状态。
虽然很难看,但这个变通方法对我来说很有用:
- (void)animationEnded:(BOOL)transitionCompleted {
if (!transitionCompleted) {
UIViewController *viewController = ...; // get the presented view controller
UIWindow *window = [UIApplication sharedApplication].keyWindow;
SEL selector = NSSelectorFromString(@"_removeRotationViewController:");
if ([window respondsToSelector:selector]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[window performSelector:selector withObject:viewController];
#pragma clang diagnostic pop
}
}
}我要为这件事向雷达报告。
https://stackoverflow.com/questions/20455479
复制相似问题