繁体   English   中英

提出的UIViewController不会在解雇时被释放

[英]Presented UIViewController not getting deallocated on dismissal

首先,我已经阅读了很多关于SO的答案,但我似乎仍然无法解决此问题。

在我的appDelegate,如果用户没有登录,我提出WelcomeViewController从窗口的RootViewController的,这是一个实例MMDrawerController

WelcomeViewController welcome = [[WelcomeViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:welcome];
[self.window.rootViewController presentViewController:nav animated:false completion:nil];
// NSLog(@"self.window.root: %@", self.window.rootViewController); 
// gives <MMDrawerController: 0xdf578e0>

在某个时候,用户要么跳过要么成功登录,在这种情况下,我从WelcomeViewController触发以下代码:

// WelcomeViewController.m
- (void)userSuccessfullySignedIn
{
    [self.presentingViewController dismissViewControllerAnimated:true completion:self.successBlock];
    // NSLog(@"self.presentingViewController: %@", self.presentingViewController); 
    // gives <MMDrawerController: 0xdf578e0>
}

我以为我通过在presentingViewController上调用dismiss而不是self来做正确的事,但是从未调用过dealloc:

- (void)dealloc
{
    NSLog(@"dealloc was called");
}

结果,即使我将其关闭,我的WelcomeViewController实例仍保留在内存中。 如您从我的控制台输出中看到的,呈现和关闭是在同一MMDrawerController实例中进行的。

我需要怎么做才能正确将其关闭并释放内存?

经过一天的苦战,事实证明这是Taplytics v1.2.24中的一个错误。 该错误已在1.2.32中修复。

它们在UIBarButtonItem上有一个类别,它们在其中进行一些方法修改,并且拥有对rightBarButtonItem(这是我的viewController)目标的强烈引用。 反过来又阻止了我的UIViewController释放。

驳回视图控制器是一样的解除分配。 您需要将presentingViewController设置为nil.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM