【发布时间】:2014-04-12 21:38:32
【问题描述】:
我没有使用导航控制器或标签栏控制器,我没有使用推送/弹出方法或模态显示视图。在我的主视图控制器中,我添加了一个视图控制器,如下所示:
UIViewController *nextController;
nextController = [[GamePlayViewController alloc] initWithNibName:@"GamePlayView" bundle:nil];
[nextController performSelector:@selector(setDelegate:) withObject:self];
temporaryController = nextController;
[self.view addSubview:nextController.view];
这个视图控制器遵循一个委托协议,当用户在这个游戏视图中结束时,这个代码被调用:
[delegate backToMenu:self];
在应用的主视图控制器中调用这个函数:
- (void)backToMenu:(GamePlayViewController *)sender {
NSLog(@"back to menu");
[temporaryController.view removeFromSuperview];
}
使用 removeFromSuperview 删除视图似乎只是摆脱了视图,但由于 NSLogging,我可以看到代码仍在该已删除视图的 .m 文件中执行。该视图仍在应用程序的内存中。它并没有像我希望的那样被丢弃。
“Release”是一个永远不会与 ARC 一起使用的旧遗物,那么如何才能完全删除使用 alloc/initWithNibName 创建的 viewController?
谢谢!
【问题讨论】:
-
temporaryController是如何定义的?如果它是一个强属性,答案可能就像将其设置为 nil 一样简单。 -
@PhillipMills 它在我的主视图控制器的头文件中声明: UIViewController *temporaryController;作为 Rich 下面提供的解决方案的一部分,尝试将其设置为 nil,但并未更改该视图仍继续运行代码的方式
标签: ios iphone objective-c uiviewcontroller