【问题标题】:MVYMenuViewController: How to destroy a view controller which was instantiated from storyboardMVYMenuViewController:如何销毁从情节提要中实例化的视图控制器
【发布时间】:2014-02-07 10:49:08
【问题描述】:

我将 MVYMenu 与情节提要 (XCode 5/iOS7) 一起使用。我不得不修改使用 xibs 的示例。 到目前为止,它可以工作,但我认为每次用户单击侧边菜单时实例化控制器时都会泄漏视图控制器:

这是我的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

UINavigationController *navigationController;
UIViewController * mrViewController;

if (indexPath.row == 0) {

    mrViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"mrViewController1"];

} else if (indexPath.row == 1){

    mrViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"mrViewController2"];

} else if (indexPath.row == 2){

    mrViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"mrViewController3"];

} else if (indexPath.row == 3){

    mrViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"mrViewController4"];

}  else {

    mrViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"mrViewController1"];

}

navigationController = [[UINavigationController alloc] initWithRootViewController:mrViewController];
[[self sideMenuController] changeContentViewController:navigationController closeMenu:YES];

}

当我监控性能时,每次单击表格单元格以调出新场景时,内存使用量都会增加。我想我必须在上面的代码中的某个地方销毁以前的当前视图控制器,但我不知道如何以及在哪里?我是 iOS 新手,来自 Android...

【问题讨论】:

  • 您在使用 ARC 吗?这些mrViewController 相对于该代码所在的表视图如何存在?我不熟悉MVYMenu。它不是普通 Objective-C 的一部分,据我所知,它不一定很常见,所以对它应该如何工作的一些解释可能会有所帮助。

标签: ios iphone storyboard instantiation viewcontroller


【解决方案1】:

由于您使用的是故事板,请创建一个从 tableViewController 到详细视图控制器的推送 segue,并从 didSelectRowAtIndexPath: 方法调用这些 segue。这是在带有故事板的视图控制器之间转换的正确方法。它也恰好比你正在做的事情容易得多。如果你的行是静态的,你甚至可以将 segues 直接挂到行上,你根本不需要做任何编程!

【讨论】:

  • 对最后一条评论的一个警告......你仍然需要关闭视图控制器......
  • 我正在使用情节提要,但 MVYMenu 组件(最初使用笔尖)从单独的笔尖创建 TableView。这是 MVYMenuViewController 中的代码: - (void)viewDidLoad { [super viewDidLoad]; // 在从 nib 加载视图后做任何额外的设置。 [self.tableView registerClass:[UITableViewCell 类] forCellReuseIdentifier:@"MenuCell"]; self.menuItems = @[@"菜单项 1",@"菜单项 2",@"菜单项 3",@"菜单项 4"]; }
  • 我能否以某种方式让 MVYMenu 使用故事板,以便我可以使用正确的方式来处理 segue? (我喜欢故事板,Android 没有这样的东西......)
  • 你应该可以。复制 nib 文件的内容并将其粘贴到情节提要中。更改 viewController 的类(如有必要)并将任何 IBOutlets 或 IBActions 链接到您的控制器类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2020-02-06
  • 2017-03-29
  • 1970-01-01
  • 2012-02-02
相关资源
最近更新 更多