自定义iOS 7 UIViewController转换保留周期

我正在我的应用程序中创建自定义转换并遇到两个问题.如果我设置视图控制器来处理UIViewControllerAnimatedTransitioning和UIViewControllerTransitioningDelegate我遇到了我的视图控制器永远不会被释放的问题.具体来说,这会创建保留:
self.transitioningDelegate = self;

如果我不这样做,并将UIViewControllerAnimatedTransitioning和UIViewControllerTransitioningDelegate放在一个名为TransitionController的单独的NSObject中,并将其设置如下:

self.transitioningDelegate = [[TransitionController alloc] init];

UIViewController被释放,但我在TransitionController对象上得到了内存泄漏.现在有人,我做错了吗?

解决方法

我遇到了同样的问题,并且能够解决它.自定义转换API没有很好的文档记录,并且需要大量的试验和错误才能使一切正常.

让我向您介绍一下如何在没有任何内存问题的情况下使其正常工作:

以下是球员:

VCA =想要以模态方式呈现VCB的视图控制器
VCB =模态呈现的视图控制器(由VCA提供)

TC =执行自定义动画的自定义转换控制器对象.
符合“UIViewControllerAnimatedTransitioning”的NSObject子类.
将在TD内实例化.

TD =为系统提供转换控制器的自定义转换委托对象.
符合“UIViewControllerTransitioningDelegate”的NSObject子类

现在让我们介绍VCB的一个实例

self = VCA的一个实例
myModalViewController =是self的强大属性

self.myModalViewController = [[VCB alloc] init];

[self.myModalViewController setModalPresentationStyle: UIModalPresentationCustom];
[self.myModalViewController setTransitioningDelegate: [[TD alloc] init]];
[self presentViewController: self.myModalViewController
                   animated:YES 
                 completion:NULL];

稍后,VCB要求VCA被解雇

self = VCA的一个实例
myModalViewController =前面提到的VCB的模态呈现实例

[self dismissViewControllerAnimated:YES 
                         completion:^{
             [self.myModalViewController setTransitioningDelegate: nil]; // DO THIS!!!! 
             self.myModalViewController = nil;
        }];

我希望这有帮助.它确实对我有用.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...