【问题标题】:iOS UINavigationController-based app approachiOS UINavigationController-based app 方法
【发布时间】:2014-02-09 11:17:55
【问题描述】:

我是 iOS 开发的新手,如果您能与我分享一些您的经验,我会很高兴。

我正在构建一个应用程序,它基本上是“选择你自己的冒险”书籍的多媒体版本。我有一个显示一些内容的视图控制器,当它接收到来自用户的交互(例如点击按钮)时,会显示一个新的视图控制器。

我的做法是这样的:

我将潜在的下一个视图控制器的头文件导入到当前视图控制器的头文件中。然后我定义 IBActions 以跳转到下一个控制器:

#import "path1ViewController.h"
#import "path2ViewController.h"
...
-(IBAction)goToPath1:(id)sender;
-(IBAction)goToPath2:(id)sender;
...

然后,在实现文件中,每当触发 IBAction 时,我都会创建新控制器的实例并将它们推送到导航控制器中:

-(IBAction)goToPath1:(id)sender{  
    path1ViewController *path1VC = [[path1ViewController alloc] init];
    [self.navigationController pushViewController: path1VC];    
}

这对应用来说是个好方法吗?

我还注意到,当我在控制器之间来回跳转时,应用程序消耗的内存会增加,这意味着它们没有被释放。有什么想法吗?

编辑: 这就是我在控制器之间切换时内存指示器发生的情况。 ARC 已激活:

【问题讨论】:

标签: ios objective-c uiviewcontroller uinavigationcontroller workflow


【解决方案1】:

首先你的方法是正确的。 UINavigationController 是多个视图控制器的堆栈。

-(IBAction)goToPath1:(id)sender{  
    path1ViewController *path1VC = [[path1ViewController alloc] init];
    [self.navigationController pushViewController: path1VC];    
}

如果您在项目中使用/启用了 ARC,以上几行是正确的。您的内存管理由编译器自动完成。

如果您选择非 ARC 方法,那么您必须在将视图控制器推入导航控制器堆栈后释放,然后您的代码将是,

-(IBAction)goToPath1:(id)sender{  
    path1ViewController *path1VC = [[path1ViewController alloc] init];
    [self.navigationController pushViewController: path1VC]; 
    [path1VC release];   
}

在非 ARC 方式中,您必须手动处理内存管理。

【讨论】:

  • @guardabrazo,你能告诉我为什么我的答案在接受后被拒绝吗?
  • 抱歉,我不小心点击了复选标记。顺便说一句,尽管启用了 ARC,但内存仍在增加。有什么想法吗?
  • 如果您在 Arc 中转换代码,请不要担心。 ARC 在未来变量范围的任一端删除内存是的,删除那些不再有用的引用。浏览此文档developer.apple.com/library/ios/releasenotes/ObjectiveC/…
【解决方案2】:

对于在控制器之间切换,这是基于动作推送控制器的最常用方法,但如果您面临内存问题,那么只需使用 Instrument 查找内存泄漏或使用 ARC!

【讨论】:

  • ARC 不应该默认工作吗?如果不是,我该怎么办?谢谢你的回答。
  • 如果你使用的是ARC,那么你需要寻找retain cycle
【解决方案3】:

Arc 自动释放对象。你的过程完成了然后你想回到主视图然后 POP 视图控制器。

【讨论】:

    猜你喜欢
    • 2016-10-16
    • 2013-01-29
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2012-11-26
    相关资源
    最近更新 更多