【发布时间】:2014-03-04 22:19:12
【问题描述】:
首先,我已经阅读了很多关于 SO 的答案,但我似乎仍然无法解决这个问题。
在我的 appDelegate 中,如果用户没有登录,我会从窗口的 rootViewController 中呈现WelcomeViewController,这是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 而不是 self 上调用了dismiss,但从未调用过 dealloc:
- (void)dealloc
{
NSLog(@"dealloc was called");
}
因此,我的 WelcomeViewController 实例仍保留在内存中,即使我已将其关闭。正如您从我的控制台输出中看到的那样,展示和关闭是在同一个 MMDrawerController 实例中进行的。
我需要怎么做才能正确关闭它并释放它的内存?
【问题讨论】:
-
您说您正在从根视图控制器呈现欢迎控制器,但您发布的代码正在呈现导航控制器。这是笔误吗?
-
不,不是错字,只是觉得没关系。在
userSuccessfullySignedIn中,如果我登录self.navigationController.presentingViewController,我仍然会得到相同的MMDrawerController 实例。 Welcome 和 Nav 实际上会关闭并从屏幕上删除,只是它们的内存从未重新分配。
标签: ios iphone objective-c memory-management uiviewcontroller